[英]Update the position of textview/imageview at relative layout after moving it by touch
我想有可能通过使用触摸来更改屏幕上项目(文本视图/图像视图)的位置。 所以我制作了 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;
}
};
如果有人知道如何改进它,请留下答案
这可能是动画问题,您正在使用 ViewAnimation 尝试使用 Object animator 中的更改。 它支持表单 API 11。
ObjectAnimator.ofFloat(view,"Translate",x,y,toX,toY);
我有一个类似的问题(触摸对象在移动时振动)并通过使用getRawX()
和getRawY()
而不是getX()
和getY()
解决了它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.