Android拖动控件改变其位置

原创  2012年12月26日 17:54:25
  • 3100

mainActivity如下:

[java]  view plain  copy
  1. package cn.dragtest;  
  2. import android.app.Activity;  
  3. import android.graphics.Rect;  
  4. import android.os.Bundle;  
  5. import android.util.DisplayMetrics;  
  6. import android.view.MotionEvent;  
  7. import android.view.View;  
  8. import android.view.View.OnTouchListener;  
  9. import android.view.Window;  
  10. import android.widget.Button;  
  11. import android.widget.ImageView;  
  12. public class MainActivity extends Activity implements OnTouchListener{  
  13.    private Button mButton;  
  14.    private ImageView mImageView;  
  15.    private DisplayMetrics displayMetrics;  
  16.    private float lastX=0;  
  17.    private float lastY=0;  
  18.    private int screenWidth=0;  
  19.    private int screenHeight=0;  
  20.    private int left;  
  21.    private int top;  
  22.    private int right;  
  23.    private int bottom;  
  24.    private boolean isFirst=true;  
  25.     @Override  
  26.     public void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.main);  
  29.         initView();  
  30.     }  
  31.     private void initView() {  
  32.          mButton=(Button) findViewById(R.id.button);      
  33.          mImageView=(ImageView) findViewById(R.id.imageView);  
  34.          mButton.setOnTouchListener(this);  
  35.          mImageView.setOnTouchListener(this);  
  36.     }  
  37.     public boolean onTouch(View view, MotionEvent event) {  
  38.         if (isFirst) {  
  39.             // 得到屏幕的宽  
  40.             displayMetrics = getResources().getDisplayMetrics();  
  41.             screenWidth = displayMetrics.widthPixels;  
  42.             // 得到标题栏和状态栏的高度  
  43.             Rect rect = new Rect();  
  44.             Window window = getWindow();  
  45.             mImageView.getWindowVisibleDisplayFrame(rect);  
  46.             int statusBarHeight = rect.top;  
  47.             int contentViewTop = window.findViewById(Window.ID_ANDROID_CONTENT).getTop();  
  48.             int titleBarHeight = contentViewTop - statusBarHeight;  
  49.             // 得到屏幕的高  
  50.             screenHeight = displayMetrics.heightPixels- (statusBarHeight + titleBarHeight);  
  51.             isFirst=false;  
  52.         }  
  53.         int action=event.getAction();  
  54.         switch (action) {  
  55.         //按下  
  56.         case MotionEvent.ACTION_DOWN:  
  57.             //按下处坐标  
  58.             lastX=event.getRawX();  
  59.             lastY=event.getRawY();  
  60.             break;  
  61.         //移动  
  62.         case MotionEvent.ACTION_MOVE:  
  63.             //移动的距离  
  64.             float distanceX=event.getRawX()-lastX;  
  65.             float distanceY=event.getRawY()-lastY;  
  66.             //移动后控件的坐标  
  67. 更多相关文章

    1. android 开启自动旋转屏幕
    2. android 点亮屏幕和屏幕解锁
    3. Android P 手机厂商(华为、Oppo,Vivo)屏幕适配实现记录
    4. android 遍历所有控件
    5. Android获取屏幕相关属性ScreenUtil
    6. Android学习--动态向SPinner控件中添加数据
    7. android 屏幕方向随传感器变化,并带有切换大屏,小屏和锁定屏幕方向

    随机推荐

    1. Android(安卓)利用奇虎DroidPlugin实现插
    2. Android的HTTP Client
    3. Error parsing XML: junk after document
    4. Android动画特效实例
    5. Android(安卓)Studio实现格式化XML代码顺
    6. android EditText监听事件处理方法
    7. 动态的修改自定义custom title
    8. Android(安卓)数据库SQLiteDatabase的使
    9. 深入浅出RxJava1(四:在Android中使用响应式
    10. 语言转换的一些问题以及让dialog没有标题