我想要实现的效果很简单,如下:
在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不断在原位置和新位置来回闪现。
还请各位大神为我指点迷津!谢谢!
界面如上图,蓝色是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;
}