use*_*151 10 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.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;
}
});
Run Code Online (Sandbox Code Playgroud)
IEB*_*ara 36
以下是我认为它可能起作用的情况.
我看到你正在使用img.getX(),img.getY()所以我假设你正在使用API级别11或更高级别.
而且我认为你img的实例是ImageView.(FrameLayout.LayoutParams虽然ImageView 的用法很奇怪......)
以下是如何正确使用它:
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;
}
});
Run Code Online (Sandbox Code Playgroud)
================================================== ======================
========================== [2013/05/15已添加] =============================
=============== ================================================== =======
这里介绍的新对象是PointF.请使用以下代码导入PointF对象:
import android.graphics.PointF;
Run Code Online (Sandbox Code Playgroud)
实际上,这只是一个用于记录float 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; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17935 次 |
| 最近记录: |