這個也是從網上得到的代碼,例子比較簡單,但是如果有需要此功能的,這個例子可以提供很多提示,首先,給個截圖
這個是拖動以後的效果,一個imageview和一個button控件,提供兩份代碼下載吧,一份是只有一個Button的,另一份就是像上圖,就是多了一個imagview!先看下代碼吧,比較簡單:
- public class DraftTest extends Activity implements OnTouchListener{
- /** Called when the activity is first created. */
- int screenWidth;
- int screenHeight;
- int lastX;
- int lastY;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- DisplayMetrics dm = getResources().getDisplayMetrics();
- screenWidth = dm.widthPixels;
- screenHeight = dm.heightPixels - 50;
- Button button=(Button)findViewById(R.id.btn);
- ImageView imageView=(ImageView)findViewById(R.id.btn2);
- imageView.setOnTouchListener(this);
- button.setOnTouchListener(this);
- }
-
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- // TODO Auto-generated method stub
- int action=event.getAction();
- Log.i("@@@@@@", "Touch:"+action);
- //Toast.makeText(DraftTest.this, "λ�ã�"+x+","+y, Toast.LENGTH_SHORT).show();
- switch(action){
- case MotionEvent.ACTION_DOWN:
- lastX = (int) event.getRawX();
- lastY = (int) event.getRawY();
- break;
- /**
- * layout(l,t,r,b)
- * l Left position, relative to parent
- t Top position, relative to parent
- r Right position, relative to parent
- b Bottom position, relative to parent
- * */
- case MotionEvent.ACTION_MOVE:
- int dx =(int)event.getRawX() - lastX;
- int dy =(int)event.getRawY() - lastY;
-
- int left = v.getLeft() + dx;
- int top = v.getTop() + dy;
- int right = v.getRight() + dx;
- int bottom = v.getBottom() + dy;
- if(left < 0){
- left = 0;
- right = left + v.getWidth();
- }
- if(right > screenWidth){
- right = screenWidth;
- left = right - v.getWidth();
- }
- if(top < 0){
- top = 0;
- bottom = top + v.getHeight();
- }
- if(bottom > screenHeight){
- bottom = screenHeight;
- top = bottom - v.getHeight();
- }
- v.layout(left, top, right, bottom);
- Log.i("@@@@@@", "position��" + left +", " + top + ", " + right + ", " + bottom);
- lastX = (int) event.getRawX();
- lastY = (int) event.getRawY();
- break;
- case MotionEvent.ACTION_UP:
- break;
- }
- return false;
- }
- }