마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

이미지를 드래그하여 이미지를 복사 할 수 있는 방법을 알고싶습니다!

0 추천

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

여기서 드래그 후

 보시다시피 한번 하나의 음표를 드래그하면 그자리에 음표는 일회용으로 다시한번 같은 음표를 사용할 수 없습니다. 

그래서 음표를 드래그 하고도 한번더 할 수 있도록 복제를 하고싶습니다.

 

아래에 소스는 오픈소스인 드래그 소스입니다.

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;
    }
}

 

사과는 한입만 (140 포인트) 님이 2019년 5월 28일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...