如何在android中获得由画布覆盖的选择区域 [英] how to get select area which cover by canvas in android

查看:36
本文介绍了如何在android中获得由画布覆盖的选择区域的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建简单的cropImage Apps.所以我使用canvas 并绘制它rubtime.我在视图上绘制画布.所以我想剪辑画布覆盖的区域.所以我喜欢这个.

hi i want create simple cropImage Apps.so I Use canvas and draw it rubtime.i draw the canvas over the view.so i want get clip the area which cover by canvas. so here i do like this.

首先创建画布示例

public class CanvasExample extends Activity 
    {
        /** Called when the activity is first created. */

        RelativeLayout relMainOperationLayout;
        RelativeLayout relTabHeader;
        RelativeLayout relMidalLayout;
        RelativeLayout relBelowLayout;
        Context myContext;
        DrawCanvas drawCanvas;

        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            myContext=CanvasExample.this;

            LayoutInflater layoutInflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);   

            int layoutId = myContext.getResources().getIdentifier("main","layout",getPackageName());

            relMainOperationLayout = (RelativeLayout) layoutInflater.inflate(layoutId,null);

            relTabHeader=(RelativeLayout) relMainOperationLayout.findViewById(R.id.relHeadLayout);

            relMidalLayout=(RelativeLayout) relMainOperationLayout.findViewById(R.id.relmidalLayout);

            relBelowLayout=(RelativeLayout) relMainOperationLayout.findViewById(R.id.relBelowLayout);

            drawCanvas=new DrawCanvas(CanvasExample.this,myContext);
            //drawCanvas.setBackgroundColor(Color.YELLOW);
            drawCanvas.setBackgroundDrawable(CanvasExample.this.getResources().getDrawable(R.drawable.ic_launcher));
            RelativeLayout.LayoutParams drawParams=new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,200);
            drawParams.addRule(RelativeLayout.BELOW, relTabHeader.getId());
            //relMidalLayout.addView(drawCanvas,drawParams);
            relMainOperationLayout.addView(drawCanvas,drawParams);
            setContentView(relMainOperationLayout);
        }

在此之后我创建一个类DrawCanvas 扩展View.并绘制 Canvas 运行时.

after this i create one class DrawCanvas extends View. and Draw the Canvas run time.

public class DrawCanvas extends View 

{

Context drawContext;
Activity drawActivity;
ImageView image;
Paint mPaint;
int left=0,right=0,top=0,bottom=0;
Canvas passCanvas;


public DrawCanvas(Activity activity,Context context)
{
    super(activity);
    this.drawActivity=activity;
    this.drawContext=context;


        mPaint = new Paint();

        mPaint.setDither(true);
        mPaint.setColor(Color.RED);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeWidth(3);

    this.setOnTouchListener(new View.OnTouchListener() {

        //@Override
        public boolean onTouch(View v, MotionEvent event)
        {

            switch (event.getActionMasked()) 
            {
            case MotionEvent.ACTION_DOWN:
                invalidate();
                left=(int) event.getX();
                right=left+1;
        top=(int) event.getY();

                bottom=top+1;               

                mPaint.setColor(Color.BLACK);
           onDraw(passCanvas=new Canvas());
            break;
            case   MotionEvent.ACTION_MOVE:                 
                invalidate();

                int tempX=(int) event.getX();

                if(tempX>right)
                {
                    right=right+1;

                }else
                {
                    right=right-1;
                }                   
                int tempY=(int) event.getY();

                if(tempY>bottom)
                {
                bottom=bottom+1;                
                }else
                {
                    bottom=bottom-1;        

                }
        mPaint.setColor(Color.GREEN);
                onDraw(passCanvas=new Canvas());
            break;

            case MotionEvent.ACTION_UP:
                invalidate();
                mPaint.setColor(Color.RED);
                onDraw(passCanvas=new Canvas());
                System.err.println("After Touch Up");
                Rect rect= passCanvas.getClipBounds();
                System.err.println("Save Canvas-->"+passCanvas.save());
                System.err.println("Display Rect Width==>"+rect.toString());

            break;
            default:
                break;
            }
    return true;
        }
    });     

}

@Override
protected void onDraw(Canvas canvas) 
{

    canvas.drawRect(left, top, right, bottom, mPaint);

}

}

所以现在我该怎么做我想用画布裁剪覆盖区域.提前致谢.

so now i what to do i want crop the covered area by canvas. Thank in advance.

当我得到ClipBounds时它显示空值现在我该怎么办.

when i getClipBounds it Display null value now i what to Do.

推荐答案

我认为您想要进行非矩形裁剪.请参阅Android - 从多点裁剪图像如何在Android上的四个点之间裁剪图像

I think you want to do non rectangular cropping. Please refer to Android - Crop an image from multipoints or How to crop an image in between four points on Android

您可能会发现它们很有用.

You might find them useful.

最好的编码!

这篇关于如何在android中获得由画布覆盖的选择区域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆