mainActivity如下:
package cn.dragtest;import android.app.Activity;import android.graphics.Rect;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.view.Window;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends Activity implements OnTouchListener{ private Button mButton; private ImageView mImageView; private DisplayMetrics displayMetrics; private float lastX=0; private float lastY=0; private int screenWidth=0; private int screenHeight=0; private int left; private int top; private int right; private int bottom; private boolean isFirst=true; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initView(); }private void initView() { mButton=(Button) findViewById(R.id.button); mImageView=(ImageView) findViewById(R.id.imageView); mButton.setOnTouchListener(this); mImageView.setOnTouchListener(this);}public boolean onTouch(View view, MotionEvent event) {if (isFirst) {// 得到螢幕的寬displayMetrics = getResources().getDisplayMetrics();screenWidth = displayMetrics.widthPixels;// 得到標題列和狀態列的高度Rect rect = new Rect();Window window = getWindow();mImageView.getWindowVisibleDisplayFrame(rect);int statusBarHeight = rect.top;int contentViewTop = window.findViewById(Window.ID_ANDROID_CONTENT).getTop();int titleBarHeight = contentViewTop - statusBarHeight;// 得到螢幕的高screenHeight = displayMetrics.heightPixels- (statusBarHeight + titleBarHeight);isFirst=false;}int action=event.getAction();switch (action) {//按下case MotionEvent.ACTION_DOWN://按下處座標lastX=event.getRawX();lastY=event.getRawY();break;//移動case MotionEvent.ACTION_MOVE://移動的距離float distanceX=event.getRawX()-lastX;float distanceY=event.getRawY()-lastY;//移動後控制項的座標left=(int)(view.getLeft()+distanceX);top=(int)(view.getTop()+distanceY);right=(int)(view.getRight()+distanceX);bottom=(int)(view.getBottom()+distanceY);//處理拖出螢幕的情況if (left<0) {left=0;right=view.getWidth();}if (right>screenWidth) {right=screenWidth;left=screenWidth-view.getWidth();}if (top<0) {top=0;bottom=view.getHeight();}if (bottom>screenHeight) {bottom=screenHeight;top=screenHeight-view.getHeight();}//顯示圖片view.layout(left, top, right, bottom);lastX=event.getRawX();lastY=event.getRawY();break;//抬起case MotionEvent.ACTION_UP:break;default:break;}return false;}}
main.xml如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center_horizontal" > <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" android:clickable="true" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="please drag" android:clickable="true" /></LinearLayout>