ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • FrmaeLayout 에서 margin값으로 터치시 움직이기.....
    과거...../개발일지 2010. 8. 8. 09:31

    한번 테스트 할게 있어 따로 빼서 작성해 본 소스입니다.
    하지만 정확한 포인트을 못잡아서...  대략 난감하게...임의로 수치를 부여한 부분 이 있습니다.
    ( 터치 시작시 미세한 도형의 이동......혹시 이부분 아시거나 수정하신 분이 있으면 .... 댓글좀.....~~)
    밑에 소스와 전체 프로젝트 통째로 첨부 해 봅니다.
    (움직임은 가로 만 적용되게 해놓았습니다.)


     package com.android_test;

    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Gravity;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.widget.FrameLayout;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.FrameLayout.LayoutParams;
    import android.widget.ImageView.ScaleType;

    public class MainActivity extends Activity {

     FrameLayout frameLayout;
     LayoutParams layoutParams;
     ImageView imageView;
     TextView textView01;

     int touchX;
     int allMargin;
     Boolean mTouchStart=false;
     
     
     @Override
     public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      
      textView01 = (TextView)findViewById(R.id.textView01);
      

      imageView = new ImageView(this);
      imageView.setImageResource(R.drawable.squre);
      imageView.setScaleType(ScaleType.MATRIX);

      frameLayout = (FrameLayout) findViewById(R.id.layout);
      layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT);

      layoutParams.gravity = Gravity.LEFT;
      layoutParams.leftMargin = 60;
      layoutParams.topMargin = 20;
      allMargin = layoutParams.leftMargin;

      frameLayout.addView(imageView, layoutParams);
      Log.i("aaaaaaaaaaaaaaaa","Dfdf" + imageView.getId());

      imageView.setOnTouchListener(listener);
      
     }

     OnTouchListener listener = new OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
       Float x=null;
       x = event.getX();
       Log.i("v.getId()", "d + " + v.getId() + "a + " + v.getId());

       if (v.getId() == imageView.getId()) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
         startDrag(x);   
         break;
        }
       }
       return false;
      }
     };
     
     void startDrag(float x){
      touchX= (int)x; 
      mTouchStart = true;
      imageView.setOnTouchListener(null);

     }
     
     
     void doDrag(float x){
      int aTouchX;
      //aTouchX = touchX - (int)x ;
      Log.i("touxh", "b  " + x);
      layoutParams.leftMargin = (int)x-38;   //Something strange...TT(I can't fix the this point....)
      Log.i("doDramg","dff" + layoutParams.leftMargin);
      imageView.setLayoutParams(layoutParams);
     }
     
     void StopDrag(){
      mTouchStart = false;
      imageView.setOnTouchListener(listener);
     }

     
     @Override
     public boolean dispatchTouchEvent(MotionEvent ev) {
      super.dispatchTouchEvent(ev);
      float x;
      x = ev.getX();
      Log.i("x","x + " + x);
      
      if(mTouchStart == false){
       return false;
      }
      
      switch(ev.getAction()){
      case MotionEvent.ACTION_MOVE:
       doDrag(x);
       break;
      case MotionEvent.ACTION_UP:
       allMargin = (int)x;
       StopDrag();
       break;
      }
      return false;
     }
     

    }


Designed by Tistory.