Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class MainActivity extends Activity {
- LinearLayout pianoKeysContainer;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- pianoKeysContainer = (LinearLayout) findViewById(R.id.key_container);
- pianoKeysContainer.setOnTouchListener(onYourViewTouchListener);
- }
- //Here we load the view positions after render it and fill the array with the positions
- private List<Integer> positionsLeft_whiteKeys = new ArrayList<Integer>();
- private List<Integer> positionsRight_whiteKeys = new ArrayList<Integer>();
- public void onWindowFocusChanged(boolean hasFocus)
- {
- super.onWindowFocusChanged(hasFocus);
- for (int i = 0; i < pianoKeysContainer.getChildCount(); i++)
- {
- //positionsLeft_whiteKeys holds the start x of each view.
- positionsLeft_whiteKeys.add(pianoKeysContainer.getChildAt(i).getLeft());
- //positionsRight_whiteKeys holds the end x of each view.
- positionsRight_whiteKeys.add(pianoKeysContainer.getChildAt(i).getRight());
- }
- }
- public View.OnTouchListener onYourViewTouchListener = new View.OnTouchListener()
- {
- float positionX;
- FrameLayout pianoKey;
- FrameLayout lastPlayedKey;
- ArrayList<FrameLayout> pressedKeys = new ArrayList<FrameLayout>();
- @Override
- public boolean onTouch(View view, MotionEvent motionEvent)
- {
- positionX = motionEvent.getX();
- float pitch;
- //Looping on the child of the layout which contains the piano keys
- for (int x = 0; x < ((LinearLayout) view).getChildCount(); x++)
- {
- // Calculating the pitch to get good chords
- pitch = (float) Math.pow(Math.pow(2.0, 1 / 12.0), (float) x);
- pianoKey = (FrameLayout) ((LinearLayout) view).getChildAt(x);
- if (positionsLeft_whiteKeys.size() >= 0 && positionsRight_whiteKeys.size() >= 0)
- {
- if (positionX > positionsLeft_whiteKeys.get(x) && positionX < positionsRight_whiteKeys.get(x))
- {
- pianoKey = (FrameLayout) ((LinearLayout) view).getChildAt(x);
- if (pianoKey != null)
- {
- pianoKey.setBackgroundResource(R.drawable.dinger14);
- pressedKeys.add(pianoKey);
- }
- if (lastPlayedKey != pianoKey)
- playKey(pitch);
- lastPlayedKey = pianoKey;
- break;
- }
- if (lastPlayedKey != null)
- {
- pianoKey.setBackgroundResource(R.drawable.dinger14);
- lastPlayedKey.setBackgroundResource(R.drawable.dinger14);
- }
- }
- }
- if (motionEvent.getAction() == MotionEvent.ACTION_UP)
- {
- lastPlayedKey = null;
- for (FrameLayout pressedKey : pressedKeys)
- {
- pressedKey.setBackgroundResource(R.drawable.dinger14);
- }
- }
- return false;
- }
- };
- //This is sound play method
- SoundPool sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 1);
- public void playKey(final float pitch)
- {
- //here you should store your piano sound at res/raw then load it
- sp.load(this, R.raw.chitare3, 1);
- sp.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener()
- {
- @Override
- public void onLoadComplete(SoundPool soundPool, int i, int i2)
- {
- soundPool.play(i, 0.99f, 0.99f, 1, 0, pitch);
- }
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement