动态更改android的矩形大小

时间:2014-09-25 19:19:04

标签: android android-canvas

我正在制作一个可以裁剪人物形象的应用程序。我的应用程序的布局将提供更好的描述

enter image description here

此处矩形将用于捕获由其长度和宽度定义的图像。矩形是可移动的。我将如何重新调整矩形的大小。例如。在WhatsApp中,当您触摸矩形内的区域时,矩形会移动。如果触摸矩形边缘,则可以重新调整适合裁剪的图像大小。所以,我有2个问题。 1)如何在矩形边缘上接收Touch事件和2)如何重新调整矩形的大小。我用画布绘制我的矩形。代码如下:

public class CustomView extends Views
{


public CustomView(Context context) 
 {
       super(context);
 }

 @Override
 protected void onDraw(Canvas canvas) 
 {
       super.onDraw(canvas);
       Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);;
       paint.setColor(Color.BLUE);
       paint.setStrokeWidth(3);
       paint.setStyle(Paint.Style.STROKE);
       canvas.drawRect(0, 0, 300, 300, paint);
 }
}

1 个答案:

答案 0 :(得分:1)

如果触摸矩形并修改MotionEvent.ACTION_DOWN

中矩形的右,左,底部和顶部,则应实现OnTouchListener并检入MotionEvent.ACTION_MOVE

我提供了一个未经测试的例子:

public class CustomView extends View {

    private float left=0,right = 300, top = 0, bottom = 300;

    public CustomView(Context context)
    {
        super(context);
        setOnTouchListener( new OnTouchListener() {
            float oldX, oldY;
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                boolean touch = false;
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        touch = isTouchBorderRect();
                        break;
                    case MotionEvent.ACTION_UP:
                        touch = false;
                    case MotionEvent.ACTION_MOVE:
                        if (touch){
                            float newX = event.getRawX();
                            float newY = event.getRawY();
                            float deltaX = newX-oldX;
                            float deltaY = newY-oldY;

                            left-=deltaX;
                            right +=deltaX;
                            bottom += deltaY;
                            top -= deltaY;

                        }
                        break;

                }
                return false;
            }
        });
    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);;
        paint.setColor(Color.BLUE);
        paint.setStrokeWidth(3);
        paint.setStyle(Paint.Style.STROKE);
        canvas.drawRect(left, top, right, bottom, paint);
    }

}

isTouchBorderRect()方法中,您应该检查是否触摸了矩形。

此代码未经过测试,但显示您想要开发的想法。