Android控件拖动

这里演示控件拖动的动画:

 

 

原理就是响应控件的Touch事件,在Touch事件中对移动进行处理,注意,一定要在布局文件中设置控件的

android:clickable="true"。

 

代码如下:

package com.zhycheng.draftdemo;


import android.app.Activity;
import android.os.Bundle;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class DraftDemoActivity extends Activity implements OnTouchListener {
	ImageView iv;
	int screenWidth,screenHeight;
	int lastX,lastY;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        iv=(ImageView) findViewById(R.id.imageView1);
        iv.setOnTouchListener(this);
        Display dis=this.getWindowManager().getDefaultDisplay();
        screenWidth=dis.getWidth();
        screenHeight=dis.getHeight();
        
    }
	@Override
	public boolean onTouch(View v, MotionEvent event) {
		
		switch(event.getAction())
		{
		case MotionEvent.ACTION_DOWN:
			lastX=(int)event.getRawX();
			lastY=(int)event.getRawY();
			
			break;
			
		case MotionEvent.ACTION_MOVE:
			int dx=(int)event.getRawX()-lastX;
			int dy=(int)event.getRawY()-lastY;
			
			int top=v.getTop()+dy;
			
			int left=v.getLeft()+dx;
			
			
			if(top<=0)
			{
				top=0;
			}
			if(top>=screenHeight-iv.getHeight())
			{
				top=screenHeight-iv.getHeight();
			}
			if(left>=screenWidth-iv.getWidth())
			{
				left=screenWidth-iv.getWidth();
			}
			
			if(left<=0)
			{
				left=0;
			}
			
			
			v.layout(left, top, left+iv.getWidth(), top+iv.getHeight());
			lastX=(int)event.getRawX();
			lastY=(int)event.getRawY();
			
			break;
		case MotionEvent.ACTION_UP:
			
			break;
		
		
		
		}
		
		
		return false;
	}
}


工程代码下载:Android控件拖动

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值