Android 自定义可拖拽View界面渲染刷新后不会自动回到起始位置
以自定义ImageView为例:
/**
*可拖拽ImageView
*Createdbyadminon2017/2/21.
*/
publicclassFloatingImageViewextendsImageView{
publicFloatingImageView(Contextcontext){
super(context);
}
publicFloatingImageView(Contextcontext,AttributeSetattrs){
super(context,attrs);
}
publicFloatingImageView(Contextcontext,AttributeSetattrs,intdefStyleAttr){
super(context,attrs,defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
publicFloatingImageView(Contextcontext,AttributeSetattrs,intdefStyleAttr,intdefStyleRes){
super(context,attrs,defStyleAttr,defStyleRes);
}
intstartX;
intstartY;
intleft;
inttop;
int[]temp=newint[]{0,0};
@Override
publicbooleanonTouchEvent(MotionEventevent){
booleanisMove=false;
intx=(int)event.getRawX();
inty=(int)event.getRawY();
switch(event.getAction()){
caseMotionEvent.ACTION_DOWN://touchdownsocheckifthe
startX=x;
startY=y;
temp[0]=(int)event.getX();
temp[1]=y-getTop();
break;
caseMotionEvent.ACTION_MOVE://touchdragwiththeball
left=x-temp[0];
top=y-temp[1];
if(left<0){//控制左边界不超出
left=0;
}
layout(left,top,left+getWidth(),top+getHeight());//自由拖拽
break;
caseMotionEvent.ACTION_UP:
if(Math.abs(x-startX)>2||Math.abs(y-startY)>2){//判断是否移动,再一定范围内不算是移动,解决触发事件冲突
//将最后拖拽的位置定下来,否则页面刷新渲染后按钮会自动回到初始位置
//注意父容器
RelativeLayout.LayoutParamslp=(RelativeLayout.LayoutParams)getLayoutParams();
lp.setMargins(left,top,0,0);
setLayoutParams(lp);
//确定是拖拽
isMove=true;
}
break;
}
returnisMove?true:super.onTouchEvent(event);
}
}
以上所述是小编给大家介绍的Android自定义可拖拽View界面渲染刷新后不会自动回到起始位置,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!