因为需要左滑显示删除的控件,按照https://blog.csdn.net/qq_36523667/article/details/78628633方法实现时遇到了问题https://ask.csdn.net/questions/768628,最后决定不用ObjectAnimator.ofFloat方法,而直接用layout方法
layout((getLeft() + offsetX), getTop(), (getRight() + offsetX), getBottom());
具体代码如下,把所有需要ObjectAnimator.ofFloat方法实现动画的地方,用layout方法实现
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d("TestView", "onTouchEvent: ");
int x = (int) event.getX();
int y = (int) event.getY();
Log.d("TestView", "x="+String.valueOf(x)+"y="+String.valueOf(y));
switch ( event.getAction()){
case MotionEvent.ACTION_DOWN: {
Log.d("TestView", "ACTION_DOWN: ");
MainActivity.rerecyclerView.requestDisallowInterceptTouchEvent(true);
if (MainActivity.isDeleteIconShown){//删除按钮显示出来时,直接复位
if (MainActivity.current == this){
Log.d("TestView", "ddddgetRight ="+String.valueOf(getRight())+"getLeft"+
String.valueOf(getLeft()));
//代替ObjectAnimator.ofFloat方法实现滑动效果
for (int i=0; i<buttonWidth/600;i++){
layout((getLeft() + offsetX), getTop(), (getRight() + offsetX), getBottom());
Log.d("TestView", "uuuuuuugetRight ="+String.valueOf(getRight())+"getLeft"+
String.valueOf(getLeft()));
}
layout(0, getTop(), itemwidth, getBottom());
Log.d("TestView", "uuuuuuuuugetRight ="+String.valueOf(getRight())+"getLeft"+
String.valueOf(getLeft()));
//ObjectAnimator.ofFloat(this,"translationX",0,itemwidth -getRight()).setDuration(600).start();
Log.d("TestView", "ddddddgetRight ="+String.valueOf(getRight())+"getLeft"+
String.valueOf(getLeft()));
MainActivity.isDeleteIconShown=false;
}
return false;
}
lastX = x;
lastY = y;
break;
}
case MotionEvent.ACTION_MOVE: {
Log.d("TestView", "ACTION_MOVE: ");
offsetX =x-lastX;
Log.d("TestView", "offsetX="+String.valueOf(offsetX));
int offsetY=y -lastY;
itemwidth=getWidth();//全长
viewGroup = (ViewGroup) getParent();
textView=getChildAt(1);
buttonWidth = viewGroup.getChildAt(0).getWidth(); //按钮长度
Log.d("TestView", "buttonWidth="+String.valueOf(buttonWidth)+"itemwidth="
+String.valueOf(itemwidth));
if (getRight()+offsetX < itemwidth && getRight()+offsetX >= itemwidth-(3*buttonWidth)/2) {//滑动效果
layout((getLeft() + offsetX), getTop(), (getRight() + offsetX), getBottom());
}
Log.d("TestView", "mmmmmgetRight ="+String.valueOf(getRight())+"getLeft"+
String.valueOf(getLeft()));
break;
}
case MotionEvent.ACTION_UP: {
Log.d("TestView", "ACTION_UP: ");
//抬手时,滑动距离小于删除控件长度的1/2时,自动向右复位
if (getRight() <= itemwidth && getRight() >= itemwidth - buttonWidth/2)
{
Log.d("TestView", "*****back star");
Log.d("TestView", "1*****getRight ="+String.valueOf(getRight())+"getLeft"+
String.valueOf(getLeft()));
offsetX=itemwidth-getRight();
//代替ObjectAnimator.ofFloat方法实现滑动效果
for (int i=0; i<offsetX/600;i++){
layout((getLeft() + offsetX), getTop(), (getRight() + offsetX), getBottom());
Log.d("TestView", "uuuuuuugetRight ="+String.valueOf(getRight())+"getLeft"+
String.valueOf(getLeft()));
}
layout(0, getTop(), itemwidth, getBottom());
Log.d("TestView", "uuuuuuuuugetRight ="+String.valueOf(getRight())+"getLeft"+
String.valueOf(getLeft()));
Log.d("TestView", "2*****getRight ="+String.valueOf(getRight())+"getLeft"+ String.valueOf(getLeft()));
}else if (getRight() < itemwidth-(buttonWidth/2))//抬手时,滑动距离大于删除控件长度的1/2时,显示出删除控件
{
Log.d("TestView", "*****show delete");
Log.d("TestView", "3*****getRight ="+String.valueOf(getRight())+"getLeft"+ String.valueOf(getLeft()));
offsetX=getRight()-(itemwidth-buttonWidth);
//代替ObjectAnimator.ofFloat方法实现滑动效果
for (int i=0; i<offsetX/600;i++){
layout((getLeft() + offsetX), getTop(), (getRight() + offsetX), getBottom());
Log.d("TestView", "mmmmmgetRight ="+String.valueOf(getRight())+"getLeft"+
String.valueOf(getLeft()));
}
layout(0-buttonWidth, getTop(), itemwidth-buttonWidth, getBottom());
Log.d("TestView", "mmmmmgetRight ="+String.valueOf(getRight())+"getLeft"+
String.valueOf(getLeft()));
Log.d("TestView", "4*****getRight ="+String.valueOf(getRight())+" getLeft ="
+String.valueOf(getLeft()));
MainActivity.isDeleteIconShown=true;
MainActivity.current=this;
}
break;
}
}
return true;
}
主要就是,下面的那段代码
for (int i=0; i<buttonWidth/600;i++){
layout((getLeft() + offsetX), getTop(), (getRight() + offsetX), getBottom());
Log.d("TestView", "uuuuuuugetRight ="+String.valueOf(getRight())+"getLeft"+
String.valueOf(getLeft()));
}