赞
踩
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>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。