如何在android中获得由画布覆盖的选择区域 [英] how to get select area which cover by canvas in 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屋!