关于Android动画的一个问题想请教各位大神

我想要实现的效果很简单,如下:
在LinearLayout中只有一个Textview,
我重写了LinearLayout的onTouchEvent()方法:
当手指向下滑动距离deltaY的过程中,TextView也滑动相等的距离。
思想主要是通过TextView不断使用TranslateAnimation实现的。
以下是onTouchEvent()里面的代码,childView即子控件TextView:

int downY;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
int currentY = (int) event.getY();
int deltaY = currentY - downY;
TranslateAnimation animation = new TranslateAnimation(0, 0, 0, deltaY);
animation.setDuration(0);
animation.setFillAfter(true);
childView.startAnimation(animation);
break;
case MotionEvent.ACTION_UP:
// 暂不作处理
break;
default:
break;
}

    return true;
}

但是运行代码,手指向下滑动的时候,childView会不断出现残影,
残影的效果我截不出来,大概就是childView不断在原位置和新位置来回闪现。
还请各位大神为我指点迷津!谢谢!

2个回答

图片说明

界面如上图,蓝色是LinearLayout, 白色的TextView是childView

我通过childView调用layout(l,t,r,b)改变其位置是可行的,就是不知道Animation的思路为什么会不行
以下是调用layout()可行的代码:
int downY;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downY = (int) event.getY();
childView.layout(0, 0, childView.getWidth(), childView.getHeight());
break;
case MotionEvent.ACTION_MOVE:
int currentY = (int) event.getY();
int deltaY=currentY-downY;
childView.layout(0, deltaY, childView.getWidth(), deltaY+childView.getHeight());
break;
case MotionEvent.ACTION_UP:
// 暂不作处理
break;
default:
break;
}

    return true;
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!