问题描述
- 触摸移动时移动一个视图 (ACTION_MOVE)
- 我想做一个简单的控件:容器中有一个视图。如果我触摸容器移动手指,我想让视图跟着我的手指移动。我应该使用什么样的容器(布局)?我不需要使用一个界面,只要一个简单的布局。如何做到这一点呢?
解决方案
在main.xml用""@+id/root""来设置RelativeLayout
public class MyActivity extends Activity implements View.OnTouchListener {TextView _view;ViewGroup _root;private int _xDelta;private int _yDelta;@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); _root = (ViewGroup)findViewById(R.id.root); _view = new TextView(this); _view.setText(""TextView!!!!!!!!""); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(150 50); layoutParams.leftMargin = 50; layoutParams.topMargin = 50; layoutParams.bottomMargin = -250; layoutParams.rightMargin = -250; _view.setLayoutParams(layoutParams); _view.setOnTouchListener(this); _root.addView(_view);}public boolean onTouch(View view MotionEvent event) { final int X = (int) event.getRawX(); final int Y = (int) event.getRawY(); switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams(); _xDelta = X - lParams.leftMargin; _yDelta = Y - lParams.topMargin; break; case MotionEvent.ACTION_UP: break; case MotionEvent.ACTION_POINTER_DOWN: break; case MotionEvent.ACTION_POINTER_UP: break; case MotionEvent.ACTION_MOVE: RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams(); layoutParams.leftMargin = X - _xDelta; layoutParams.topMargin = Y - _yDelta; layoutParams.rightMargin = -250; layoutParams.bottomMargin = -250; view.setLayoutParams(layoutParams); break; } _root.invalidate(); return true;}}
时间: 2024-09-14 16:18:37