packagecom.pocketdigi.move;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.MotionEvent;importandroid.view.View;importandroid.view.View.OnTouchListener;importandroid.widget.TextView;importandroid.widget.AbsoluteLayout.LayoutParams;
@SuppressWarnings("deprecation")publicclass Main extends Activity {/** Called when the activity is first created. */
TextView tv;boolean flag =false;
@Override
publicvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv =(TextView) findViewById(R.id.tv);
tv.setOnTouchListener(new OnTouchListener(){
@Override
publicboolean onTouch(View v, MotionEvent event){// TODO Auto-generated method stub
flag =true;// 当控件被点中时,flag设为true//不能写在onClick事件中returnfalse;}});}
@SuppressWarnings("deprecation")
@Override
publicboolean onTouchEvent(MotionEvent event){// TODO Auto-generated method stubif(flag){// flag为true即控件被点到时,执行移动控件操作int x =(int) event.getX();int y =(int) event.getY();// 得到X,Y座标
LayoutParams params =new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, x -10, y -40);// 四参数分别为宽,高,X,Y座标,wrap_conent为根据内容自动调整// 后面-10,-40是我自己多次调试的结果,因为我发现如果不减,那个座标并不是在指头下,而是在指头的右下角// 暂时不知道什么原因
tv.setLayoutParams(params);// 设置最终位置}if(event.getAction()== MotionEvent.ACTION_UP){// 手指离开屏幕时,把flag设为false
flag =false;}returnsuper.onTouchEvent(event);}}
int[] temp =newint[]{0, 0};
@Override
publicboolean onTouch(View v, MotionEvent event){// TODO Auto-generated method stubint eventaction = event.getAction();int x =(int) event.getRawX();int y =(int) event.getRawY();int p =(int) event.getX();int q =(int) event.getY();switch(eventaction){case MotionEvent.ACTION_DOWN:
temp[0]=(int) event.getX();
temp[1]= y - v.getTop();break;case MotionEvent.ACTION_MOVE:int l = x - temp[0];int t = y - temp[1];int r = x + v.getWidth()- temp[0];int b = y - temp[1]+ v.getHeight();
v.layout(l, t, r,b);
v.postInvalidate();break;case MotionEvent.ACTION_UP:break;}returnfalse;}