아래 사진과 같이 오선지에 음표를 드래그하여 작곡 할 수 있는 앱을 만들고 있습니다.

여기서 드래그 후
보시다시피 한번 하나의 음표를 드래그하면 그자리에 음표는 일회용으로 다시한번 같은 음표를 사용할 수 없습니다.
그래서 음표를 드래그 하고도 한번더 할 수 있도록 복제를 하고싶습니다.
아래에 소스는 오픈소스인 드래그 소스입니다.
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class WritingRoom extends AppCompatActivity implements View.OnTouchListener {
ImageView imageView1;
ImageView imageView2;
ImageView imageView3;
ImageView imageView4;
ImageView imageView5;
ImageView imageView6;
ImageView imageView7;
ImageView imageView8;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.writingroom);
imageView1 = (ImageView) findViewById(R.id.img1);
imageView2 = (ImageView) findViewById(R.id.img2);
imageView3 = (ImageView) findViewById(R.id.img3);
imageView4 = (ImageView) findViewById(R.id.img4);
imageView5 = (ImageView) findViewById(R.id.img5);
imageView6 = (ImageView) findViewById(R.id.img6);
imageView7 = (ImageView) findViewById(R.id.img7);
imageView8 = (ImageView) findViewById(R.id.img8);
imageView1.setOnTouchListener(this);
imageView2.setOnTouchListener(this);
imageView3.setOnTouchListener(this);
imageView4.setOnTouchListener(this);
imageView5.setOnTouchListener(this);
imageView6.setOnTouchListener(this);
imageView7.setOnTouchListener(this);
imageView8.setOnTouchListener(this);
}
float oldXvalue; //음표의 x값
float oldYvalue; //음표의 y값
@Override
public boolean onTouch(View v, MotionEvent event) {
int width = ((ViewGroup) v.getParent()).getWidth() - v.getWidth();
int height = ((ViewGroup) v.getParent()).getHeight() - v.getHeight();
if (event.getAction() == MotionEvent.ACTION_DOWN) { // 음표를 잡는 순간좌표
oldXvalue = event.getX();
oldYvalue = event.getY();
Log.i("Tag1", "Action Down rX " + event.getRawX() + "," + event.getRawY());
} else if (event.getAction() == MotionEvent.ACTION_MOVE) { //음표를 드래그할때의 좌표
v.setX(event.getRawX() - oldXvalue);
v.setY(event.getRawY() - (oldYvalue + v.getHeight()*2));
} else if (event.getAction() == MotionEvent.ACTION_UP) {//음표를 놓을때 좌표
if (v.getX() > width && v.getY() > height) {
v.setX(width);
v.setY(height);
} else if (v.getX() < 0 && v.getY() > height) {
v.setX(0);
v.setY(height);
} else if (v.getX() > width && v.getY() < 0) {
v.setX(width);
v.setY(0);
} else if (v.getX() < 0 && v.getY() < 0) {
v.setX(0);
v.setY(0);
} else if (v.getX() < 0 || v.getX() > width) {
if (v.getX() < 0) {
v.setX(0);
v.setY(event.getRawY() - oldYvalue - v.getHeight());
} else {
v.setX(width);
v.setY(event.getRawY() - oldYvalue - v.getHeight());
}
} else if (v.getY() < 0 || v.getY() > height) {
if (v.getY() < 0) {
v.setX(event.getRawX() - oldXvalue);
v.setY(0);
} else {
v.setX(event.getRawX() - oldXvalue);
v.setY(height);
}
}
}
return true;
}
}