您的位置:首页 > 移动开发 > Android开发

Android控件拖拽功能的实现

2014-10-17 11:46 483 查看
下面是一个Android拖拽功能的实现demo,以图片ImageView测试,当手指拖动图片时,图片会跟着手指的移动而移动

package com.example.dragtest;

import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.widget.ImageView;

public class MainActivity extends Activity {
	private ImageView imageView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        imageView = (ImageView) findViewById(R.id.imageview);
        imageView.setOnTouchListener(new OnTouchListener() {
        	float raw_x, raw_y;
			
			public boolean onTouch(View v, MotionEvent event) {
				int action = event.getAction();
				switch(action){
				case MotionEvent.ACTION_MOVE:
					//获取手指触摸的点在屏幕中的坐标
					raw_x = event.getRawX();
					raw_y = event.getRawY();
					//计算图片显示的上下左右坐标
					int l = (int) (raw_x - imageView.getWidth()/2);
					int t = (int) (raw_y - imageView.getHeight()/2);
					int r = (int) (raw_x + imageView.getWidth()/2);
					int b = (int) (raw_y + imageView.getHeight()/2);
					//计算状态栏和标题栏高度
					int statusbarHeight = getStatusBarHeight();
					int titleBarHeight = getTitleBarHeight();
					//显示图片时要减去状态栏和标题栏的高度
					int h = statusbarHeight + titleBarHeight;
					//显示图片到制定位置
					v.layout(l, t - h, r, b - h);
					break;
				}
				return true;
			}
		});
    }
    
    //获取标题栏高度
    private int getTitleBarHeight(){
    	int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
    	Log.d("yubo", "title bar height:" + (contentTop - getStatusBarHeight()));
    	return contentTop - getStatusBarHeight();
    }
    
    //获取状态栏高度
    private int getStatusBarHeight(){
    	Rect rect = new Rect();
    	getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
    	Log.d("yubo", "status bar height:" + rect.top);
    	return rect.top;
    }

}
效果图如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: