本文实例为大家分享了Android实现弹钢琴效果展示的具体代码,供大家参考,具体内容如下
目标效果:
1.drawable下新建button_selector.xml页面:
<&#63;xml version="1.0" encoding="utf-8"&#63;>
2.drawable下新建button.xml页面:
<&#63;xml version="1.0" encoding="utf-8"&#63;>
3.drawable下新建button_pressed.xml页面:
<&#63;xml version="1.0" encoding="utf-8"&#63;>
4.新建PanioMusic.java类
package com.example.weixu.view; /** * 音乐播放帮助类 */ import java.util.HashMap; import android.content.Context; import android.media.AudioManager; import android.media.SoundPool; import com.example.weixu.playpanio.R; public class PanioMusic { // 资源文件 int Music[] = {R.raw.do1, R.raw.re2, R.raw.mi3, R.raw.fa4, R.raw.sol5, R.raw.la6, R.raw.si7,}; SoundPool soundPool; HashMapsoundPoolMap; public PanioMusic(Context context) { soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 100); soundPoolMap = new HashMap (); for (int i = 0; i
5.activity_main.xml页面:
6.MainActivity.java页面:
package com.example.weixu.playpanio; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.Button; import com.example.weixu.view.PanioMusic; public class MainActivity extends Activity { private Button button[];// 按钮数组 private PanioMusic utils;// 工具类 private View parent;// 父视图 private int buttonId[];// 按钮id private boolean havePlayed[];// 是否已经播放了声音,当手指在同一个按钮内滑动,且已经发声,就为true private View keys;// 按钮们所在的视图 private int pressedkey[]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); parent = (View) findViewById(R.id.llparent); parent.setClickable(true); parent.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int temp; int tempIndex; int pointercount; pointercount = event.getPointerCount(); for (int count = 0; count= temp - 1; i--) { // 当在两端的按钮时,会有一边越界 if (i <0 || i >= button.length) { continue; } if (isInScale(event.getX(count), event.getY(count), button[i])) {// 在某个按键内 moveflag = true; if (i != temp) {// 在相邻按键内 boolean laststill = false; boolean nextstill = false; // 假设手指已经从上一个位置抬起,但是没有真的抬起,所以不移位 pressedkey[count] = -1; for (int j = 0; j = 0) { pressedkey[t] = pressedkey[t + 1]; } else { pressedkey[t] = -1; } } else { pressedkey[t] = -1; } } for (int i = 0; i button.getLeft() && x button.getTop() + keys.getTop() && y button[i].getLeft() && x
7.AndroidManifest.xml页面对某个Activity页面进行设置横屏
android:screenOrientation="landscape"
8.另外,每个按键的音效需要提前导入res下raw文件夹中。
源码:点击打开链接
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。