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(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。