Android实现View的拖拽
本文实例为大家分享了Android实现View拖拽的具体代码,供大家参考,具体内容如下
前言
实现View的拖拽,其实原理很简单。无非就是获取手指的位移信息,然后view根据手指的位移信息,移动对应的位置。
首先是获取手机的位移信息就可以根据需求不同分为两种
- 拖拽view本身,view实现移动。则设置view的setOnTouchListener。
- 在activity中随意滑动,view都会反应出动作。则重写activityonTouchEvent方法。
 
而移动的方法嘛,也有几种
- 给view设置补间动画,动画时间为0.(不推荐,因为移动的只是view的影子,本地还在原地)
- 更改view的margin。(不推荐,会影响viewgroup的布局排布)
- 根据属性动画原理,更改setTranslationX和setTranslationY.(推荐此方法,不会影响原理的布局排布)
 
代码
publicclassViewTestActivityextendsAppCompatActivity{
privatestaticfinalStringTAG="ViewTestActivity";
privateTextViewmTv1,mTv2;
privatedoublelastx,lastY;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_test);
mTv1=(TextView)findViewById(R.id.tv01);
mTv1.setOnTouchListener(newView.OnTouchListener(){
@Override
publicbooleanonTouch(Viewv,MotionEventevent){
doublex=event.getRawX();
doubley=event.getRawY();
Log.d(TAG,"onTouch:"+event.getAction());
if(event.getAction()==MotionEvent.ACTION_DOWN){
lastx=x;
lastY=y;
}elseif(event.getAction()==MotionEvent.ACTION_MOVE){
doubledx=x-lastx;
doubledy=y-lastY;
Log.d(TAG,"onTouch:dx=="+dx+",dy=="+dy);
//startAnimation(dx,dy);
//moveMethod1(dx,dy);
moveMethod2(dx,dy);
lastx=x;
lastY=y;
}
returntrue;
}
});
}
//@Override
//publicbooleanonTouchEvent(MotionEventevent){
//doublex=event.getRawX();
//doubley=event.getRawY();
//Log.d(TAG,"onTouch:"+event.getAction());
//if(event.getAction()==MotionEvent.ACTION_DOWN){
//lastx=x;
//lastY=y;
//}elseif(event.getAction()==MotionEvent.ACTION_MOVE){
//doubledx=x-lastx;
//doubledy=y-lastY;
//Log.d(TAG,"onTouch:dx=="+dx+",dy=="+dy);
////startAnimation(dx,dy);
//
////moveMethod1(dx,dy);
//moveMethod2(dx,dy);
//
//lastx=x;
//lastY=y;
//}
//returntrue;
//}
//根据属性动画的原理
privatevoidmoveMethod2(doubledx,doubledy){
mTv1.setTranslationX((float)(mTv1.getTranslationX()+dx));
mTv1.setTranslationY((float)(mTv1.getTranslationY()+dy));
}
//根据margin原理
privatevoidmoveMethod1(doubledx,doubledy){
ViewGroup.MarginLayoutParamsmarginLayoutParams=(ViewGroup.MarginLayoutParams)mTv1.getLayoutParams();
marginLayoutParams.leftMargin+=dx;
marginLayoutParams.topMargin+=dy;
mTv1.setLayoutParams(marginLayoutParams);
}
privatevoidstartAnimation(doubledx,doubledy){
ObjectAnimatorobjectAnimator=ObjectAnimator.ofFloat(mTv1,"translationX",(float)(mTv1.getTranslationX()+dx)).setDuration(3000);
objectAnimator.start();
ObjectAnimatorobjectAnimator2=ObjectAnimator.ofFloat(mTv1,"translationY",(float)(mTv1.getTranslationY()+dy)).setDuration(3000);
objectAnimator2.start();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
