我希望有可能通过触摸更改屏幕上的项目(textviews / imageview)的位置。所以我制作了OnTouchListener,如下所示:
float x = 0,y = 0 ;
private void clickOnObjectTaker() {
cream.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
boolean touched= false;
if(event.getAction()==MotionEvent.ACTION_DOWN)
{
messageMaker("touched");
x= event.getX();
y= event.getY();
}
if(event.getAction()==MotionEvent.ACTION_MOVE )
{
Animation anim =
new TranslateAnimation(x, event.getX(), y, event.getY());
anim.setFillAfter(true);
anim.setFillEnabled(true);
cream.startAnimation(anim);
x= event.getX();
y= event.getY();
}
if(event.getAction()== MotionEvent.ACTION_CANCEL)
{
cream.setX(x);
cream.setY(y);
}
return true;
}});
}
我的问题是,当我改变对象的位置时,听众不会获得新的位置,所以我在屏幕上的不同位置看到对象,但是当我想移动它时,我必须点击旧位置。我以为我通过添加以下行来解决它:
if(event.getAction()== MotionEvent.ACTION_CANCEL)
{
cream.setX(x);
cream.setY(y);
}
但没有改变。
更新:我尝试使用此代码。有|我更新布局的位置元素没有任何问题,除了通过触摸移动对象的过程外,一切都正常。 我不喜欢这种方法:
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()== MotionEvent.ACTION_DOWN){
dx = event.getX()-v.getX();
dy = event.getY()-v.getY();
}
if(event.getAction()== MotionEvent.ACTION_MOVE)
{
v.setX(event.getX()-dx);
v.setY(event.getY()-dy);
}
return true;
}
}
动画方法中oobject的移动看起来很棒,一切都很流畅。当我添加像这样的代码
时,只有问题与更新布局有关if(event.getAction()==MotionEvent.ACTION_UP )
{
v.setX(event.getX());
v.setY(event.getY());
}
它把对象置于随机位置(我无法弄清楚,他从哪个位置采取这个位置),如果有人能给我任何建议我将不胜感激
已编辑
这段代码几乎完全可以在视图上反复移动。它有两个缺点:
代码
OnTouchListener dealingwithproblems = new OnTouchListener()
{
@Override
public boolean onTouch( View v, MotionEvent event) {
if(event.getActionMasked()== MotionEvent.ACTION_DOWN){
//values for
dx = event.getX()-v.getX();
dy = event.getY()-v.getY();
x= event.getX();
y= event.getY();
}
if(event.getActionMasked()== MotionEvent.ACTION_MOVE)
{
Animation anim =
new TranslateAnimation(x, event.getX() , y, event.getY());
//anim.setFillAfter(true);
anim.setFillEnabled(true);
v.startAnimation(anim);
x= event.getX();
y= event.getY();
}
if(event.getActionMasked() == MotionEvent.ACTION_UP)
{
v.setX(event.getX()-dx);
v.setY(event.getY()-dy);
}
return true;
}
};
如果有人知道如何改进它,请留下答案PLIZ
答案 0 :(得分:0)
它可能是动画问题,你正在使用ViewAnimation尝试使用Object animator中的更改。它支持表单API 11。
ObjectAnimator.ofFloat(视图, “翻译”,X,Y,TOX,玩具);
答案 1 :(得分:0)
我遇到了类似的问题(被触摸的物体在移动时振动)并使用getRawX()
和getRawY()
代替getX()
和getY()