Android自定义可以随意拖动的ImageView和TextView

来源:互联网 发布:热血传奇mac版 编辑:程序博客网 时间:2024/05/01 20:41

Android开发中,有时候我们需要让控件可以随着手指的移动而跟随移动的效果,例如实现任意摆放的水印图片等。

下面是自定义的一种控件,可以实现这种效果。

上代码:


import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;
import android.view.MotionEvent;


public class MoveImageView extends ImageView
{

private int lastX = 0;
private int lastY = 0;

private static final int screenWidth = 720;//屏幕宽度
private static final int screenHeight = 1280;//屏幕高度

public MoveImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}


@Override
public boolean onTouchEvent(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 left = getLeft() + dx;  
            int top = getTop() + dy;  
            int right = getRight() + dx;  
            int bottom = getBottom() + dy;                      
            if(left < 0){  
                left = 0;  
                right = left + getWidth();  
            }                     
            if(right > screenWidth){  
                right = screenWidth;  
                left = right - getWidth();  
            }                     
            if(top < 0){  
                top = 0;  
                bottom = top + getHeight();  
            }                     
            if(bottom > screenHeight){  
                bottom = screenHeight;  
                top = bottom - getHeight();  
            }                     
            layout(left, top, right, bottom);   
            lastX = (int) event.getRawX();  
            lastY = (int) event.getRawY();
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;
}

}


如上代码所示,自定义了一个控件类MoveImageView,继承ImageView,然后在xml文件中,将需要移动的ImageView,用这个MoveImageView代替即可。


同理,可以拖动的TextView代码如下:


import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.TextView;


public class MoveTextView extends TextView{

private static final String TAG = "MoveTextView";

private int lastX = 0;
private int lastY = 0;

private static final int screenWidth = 720;
private static final int screenHeight = 1280;

public MoveTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}


@Override
public boolean onTouchEvent(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 left = getLeft() + dx;  
            int top = getTop() + dy;  
            int right = getRight() + dx;  
            int bottom = getBottom() + dy;                      
            if(left < 0){  
                left = 0;  
                right = left + getWidth();  
            }                     
            if(right > screenWidth){  
                right = screenWidth;  
                left = right - getWidth();  
            }                     
            if(top < 0){  
                top = 0;  
                bottom = top + getHeight();  
            }                     
            if(bottom > screenHeight){  
                bottom = screenHeight;  
                top = bottom - getHeight();  
            }                     
            layout(left, top, right, bottom);   
            lastX = (int) event.getRawX();  
            lastY = (int) event.getRawY();
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;
}
}


相关的源代码链接:点击下载Android源代码

0 0
原创粉丝点击