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

안드로이드 실력자분들 도와주세요 ㅎㅎ

0 추천
이미지에 터치이벤트를 달아서 움직인 좌표에 이미지를 옮기려하는데 .. DOWN ,MOVE를 하면 이미지가 이동 위치와 다른 지점(이상한곳)을 왔다갔다 하면서 이동 됩니다.  이상한 곳과 같이 움직니는 데 .....왜 이런거죠? 

/**
 * Created by Administrator on 2015-08-12.
 */
public class start_main extends Activity{
    String str;
    String str2;
    SimpleDateFormat sdf = new SimpleDateFormat("aH:mm ");
    SimpleDateFormat sdf2 = new SimpleDateFormat("MM.dd(E)");
    TextView timer;
    TextView date;

    int x,y;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.thread);
        timer = (TextView)findViewById(R.id.timer); //
        // 시간출력
        date = (TextView)findViewById(R.id.date);

        final ImageView slide_button = (ImageView)findViewById(R.id.slide_button);

      slide_button.setOnTouchListener(new View.OnTouchListener() {
          @Override
          public boolean onTouch(View v, MotionEvent event) {

                  switch(event.getAction()){
                  case MotionEvent.ACTION_DOWN:
                      x = (int)event.getX();
                      y = (int)event.getY();
                      Log.v("start",""+x+" "+y);
                  case MotionEvent.ACTION_MOVE:
                      Log.v("move", "" + event.getX() + " " + event.getY());



                  case MotionEvent.ACTION_UP:
                      break;
              }

                  slide_button.setX((int)event.getX());

              slide_button.setY((int)event.getY());
              return true;
          }
      }); //이부분인데... 뭐가 틀린건지....
      //시간 쓰레드
        new Thread(new Runnable() {


            @Override
            public void run() {
                while (true) {
                    Date dt = new Date();

                     str = sdf.format(dt);
                    str2 = sdf2.format(dt);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //ui스레드 -> 기본적으로 스레드는 ui변경을 할수없다.
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {

                            date.setText(""+str2);
                            timer.setText(""+str);
                        }
                    });
                }
            }
        }).start();


    }




}
익명사용자 님이 2015년 8월 19일 질문

1개의 답변

0 추천

slide_button.setOnTouchListener

 slide_button.setX((int)event.getX());
 

보시면 아시겠지만 이벤트를 발생시키는 뷰는 slide_button이구요 따라서 x,y는 이벤트 slide_button의 내부의 x,y 겠죠 근데 slide_button.setX 으로 옮겨지는것은 slide_button을 부모뷰에서의 x좌표를 이야기해야하는데요 이게 서로가 지금 맞지가 않내요.

즉 터치 이벤트가 slide_button이 아니고 start_main이라는 activity에 걸려야 맞을 같내요

컴러기 (22,230 포인트) 님이 2015년 8월 20일 답변
slide_button 을  무브이벤트로 이동 시키는데 ....
엑티비티에 걸면 무브 이벤트를 못하자나요
정성껏 답변좀
음 터치이벤트로만 상황이 해결이 않되는 문제인듯 보이내요.
버튼의 x,y 는 버튼이 포함된 영역의 x,y가 되어야 하는데 터치이벤트가 넘겨주는 x,y는 버튼내부의의 x,y 내요.
질문자 님이 알고 싶은 x,y는 버튼을 포함하는 액티비티 같은 영역의 x,y일것이고 액티비티의 x,y를 알려주는 것은 액티비티의 터치 이벤트가 되겠내요.
근데 버튼을 눌려서 이동을 시키고 싶어 하시는데요. 그럼. 버튼을 눌러서 생긴이벤트가 액티비티에선 일어 나지 않는다는것이죠?
그럼 dispatchTouchEvent(MotionEvent ev) 이벤트를 이용해보시는 것은 어떨까 합니다.
...