想实现这样的功能:一个控件(按钮 图片  或其他),手指按住后,可以拖动它的位置  这个该怎么实现呢??
多谢指点

解决方案 »

  1.   

    要自定一个view,添加触摸监听,并修改显示位置。
    或者使用绝对布局,然后加触摸监听,并修改位置。。
      

  2.   

    package rtt.gesture;import android.app.Activity;
    import android.os.Bundle;
    import android.view.GestureDetector;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.Toast;public class Gesture extends Activity {
        /** Called when the activity is first created. */
    private GestureDetector detector;
    private myGestureListener gListener;
    private ImageView image;
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
          super.onCreate(savedInstanceState);
         
          setContentView(R.layout.main);
          gListener = new myGestureListener();
          detector = new GestureDetector(Gesture.this,gListener);
          image = (ImageView)findViewById(R.id.image);
        }
        /* 当Activity的onTouchEvent()被触发时,
         * 触发GestureDetector的onTouchEvent() */
        @Override
        public boolean onTouchEvent(MotionEvent event)
        {
          if (detector.onTouchEvent(event))
          {
            return detector.onTouchEvent(event);
          }  
          else
          {
            return super.onTouchEvent(event);
          }
        }
        
        /* 自定义GestureListener类 */
        public class myGestureListener implements GestureDetector.OnGestureListener
        {
          /* 手指在屏幕上拖拉时触发此method */
          @Override
          public boolean onScroll(MotionEvent e1, MotionEvent e2,
                                  float distanceX,  float distanceY)
          {
           //你的代码应该在这里  
                    return false;
          }      @Override
          public boolean onDown(MotionEvent arg0)
          {
            return false;
          }      @Override
          public boolean onFling(MotionEvent e1, MotionEvent e2,
              float velocityX, float velocityY)
          {
              //这是横向或竖向滑动超过50之后就会触发的事件,可以作为一个例子写你需要的代码,不过这是快速滑动时触发的事件
           if (e1.getX() - e2.getX() > 50) {
         Toast.makeText(Gesture.this, "左", Toast.LENGTH_SHORT).show();
         image.setVisibility(View.INVISIBLE);
         return true;
         } else if (e1.getX() - e2.getX() < -50) {
         Toast.makeText(Gesture.this, "右", Toast.LENGTH_SHORT).show();
         image.setVisibility(View.VISIBLE);
         image.setImageResource(R.drawable.icon);
         return true;
         } else if (e1.getY() - e2.getY() > 50) {
         Toast.makeText(Gesture.this, "上", Toast.LENGTH_SHORT).show();
         return true;
         } else if (e1.getY() - e2.getY() < -50) {
         Toast.makeText(Gesture.this, "下", Toast.LENGTH_SHORT).show();
         return true;
         }        return false;
          }      @Override
          public void onLongPress(MotionEvent e)
          {
          }      @Override
          public void onShowPress(MotionEvent e)
          {
          }      @Override
          public boolean onSingleTapUp(MotionEvent e)
          {
            return false;
          }
        }
      }