如何在android emulator上使用用户手指平滑移动图像视图
当我第一次在屏幕上移动如何在android emulator上使用用户手指平滑移动图像视图,android,android-imageview,Android,Android Imageview,当我第一次在屏幕上移动ImageView时,一切都很好,但第二次ImageView移动不正常 这就是我到目前为止所做的 img.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub int eid = event.g
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;
}
});
以下是我认为可行的情况 我看到您正在使用
img.getX()
,img.getY()
,
所以我假设您使用的是API级别11或更高
我假设您的img
是ImageView
的实例。
(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;
实际上,这只是一个记录浮点x和浮点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。希望这会有所帮助
此处,mViewGroup是限制ImageView的相对布局的视图组实例
此外,imgposx、imgposy是全局变量
float imgposx, imgposy;
PointF DownPT=新的PointF();//按下PointF StartPT=new PointF()时记录鼠标位置;//记录“img”的起始位置,请向我提供上述代码的详细信息。我怎样才能声明这些对象。@user2380151:对不起,我的错。请使用以下代码导入“PointF”对象:导入android.graphics.PointF;实际上,这只是一个记录浮点x和浮点y的对象。如果确实无法导入该对象,请自己编写一个如下的对象:公共类PointF{public float x=0;public float y=0;public PointF(){};public PointF(float{x,float{y){x=\U x;y=\U y;}很好的解决方案,但如何防止图像进入虚拟按钮部分。它使我的图像消失???@IEBasara我想在触摸屏上旋转图像视图,而不使用其中的矩阵。。。。下一步我能做什么?如何使视图在特定范围内可拖动?下面是一个例子本文就是一个很好的例子。它还处理缩放手势和多点触摸
mViewGroup= (ViewGroup) findViewById(R.id.relativeLayout);
float imgposx, imgposy;