如何平滑移动用户手指在Android模拟器上的图像视图

当我在屏幕上移动ImageView时候,每一件事情都很好,但第二次ImageView不能正常移动。

这是我迄今为止所做的。

 img.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub int eid = event.getAction(); switch (eid) { case MotionEvent.ACTION_MOVE: FrameLayout.LayoutParams mParams = (FrameLayout.LayoutParams) img.getLayoutParams(); int x = (int) event.getRawX(); int y = (int) event.getRawY(); mParams.leftMargin = x-50; mParams.topMargin = y-50; img.setLayoutParams(mParams); break; case MotionEvent.ACTION_DOWN: x1=img.getX(); y1=img.getY(); break; case MotionEvent.ACTION_UP: img.setX(x1); img.setY(y1); break; default: break; } return true; } }); 

  • getImageResource()Android。 这可能吗?
  • 将图像裁剪为方形 - Android
  • Android将图像alignment在RelativeLayout的顶部和中间
  • Android - 围绕ImageView设置边框
  • 阻止ImageView将视图推送到屏幕外
  • Android从setImageBitmap缩放imageview
  • 两个imageview之间的animation过渡
  • 问题与CoordinatorLayout和ImageView,在滚动时调整宽度
  • 以下是我认为可能会起作用的情况。

    我看到你正在使用img.getX()img.getY() ,所以我假设你正在使用API​​ Level 11或更高版本。

    我假设你的imgImageView的实例。 (ImageView的FrameLayout.LayoutParams的使用虽然…奇怪)

    以下是如何正确使用它:

     img.setOnTouchListener(new OnTouchListener() { PointF DownPT = new PointF(); // Record Mouse Position When Pressed Down PointF StartPT = new PointF(); // Record Start Position of 'img' @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_MOVE : img.setX((int)(StartPT.x + event.getX() - DownPT.x)); img.setY((int)(StartPT.y + event.getY() - DownPT.y)); StartPT.set( img.getX(), img.getY() ); break; case MotionEvent.ACTION_DOWN : DownPT.set( event.getX(), event.getY() ); StartPT.set( img.getX(), img.getY() ); break; case MotionEvent.ACTION_UP : // Nothing have to do break; default : break; } return true; } }); 

    ================================================== ======================
    ========================== [2013/05/15新增] ================ =============
    ================================================== ======================

    这里介绍的新对象是PointF 。 请使用以下代码导入PointF对象:

     import android.graphics.PointF; 

    而实际上,这只是一个loggingfloat x和float y的对象。 如果你真的不能导入这个对象,像下面这样写一个:

     public class PointF { public float x = 0; public float y = 0; public PointF(){}; public PointF( float _x, float _y ){ x = _x; y = _y; } public void set( float _x, float _y ){ x = _x; y = _y; } } 

    这段代码可以帮助你在屏幕边界内拖动imageview。 希望这会有所帮助。

      @Override public boolean onTouch(View v, MotionEvent event) { int X = (int) event.getRawX(); int Y = (int) event.getRawY(); RelativeLayout.LayoutParams paramsnew = (RelativeLayout.LayoutParams) v.getLayoutParams(); switch(event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: _xDelta = X - paramsnew.leftMargin; _yDelta = Y - paramsnew.topMargin; imgposx = img.getX(); imgposy = img.getY(); break; case MotionEvent.ACTION_UP: img.setX(diyoposx); img.setY( diyoposy ); break; case MotionEvent.ACTION_MOVE: RelativeLayout.LayoutParams param = (RelativeLayout.LayoutParams) v.getLayoutParams(); param.leftMargin = X - _xDelta; param.topMargin = Y - _yDelta; param.rightMargin=(250*-1); param.bottomMargin=(250*-1); v.setLayoutParams(param); break; } mViewGroup.invalidate(); } 

    这里mViewGroup是绑定ImageView的相对布局的ViewGroup实例

     mViewGroup= (ViewGroup) findViewById(R.id.relativeLayout); 

    而且,imgposx,imgposy是全球可变的

     float imgposx, imgposy;