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>
时间: 2024-09-20 10:52:42