如何在android中获取由canvas覆盖的选区

时间:2012-08-07 06:59:36

标签: android canvas

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

首先创建Canvas Example

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运行时间。

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);

}

}

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

当我的getClipBounds它现在显示空值我该做什么。

1 个答案:

答案 0 :(得分:0)

我想你想做非矩形裁剪。请参阅Android - Crop an image from multipointsHow to crop an image in between four points on Android

您可能会觉得它们很有用。

最佳编码!