我试图创建一个矩形,但是这是当我从起步之举发生的事情向终点坐标坐标
,其实我想表明的进展,当用户从一个地方移动到另一个作为well.This是我想拥有的。 。
码:-
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
downx = event.getX();
downy = event.getY();
//v.invalidate();
break;
case MotionEvent.ACTION_MOVE:
upx = event.getX();
upy = event.getY();
canvas.drawRect(downx, downy, upx, upy, paint);
}
choosenImageView.invalidate();
break;
case MotionEvent.ACTION_UP:
upx = event.getX();
upy = event.getY();
canvas.drawRect(downx, downy, upx, upy, paint);
}
}
// v.invalidate();
break;
}
return true;
}
编辑我想这样做是为了显示进度,即当用户移动他的手指,形状应绘制。
建议/样品/链接任何将不胜感激。
你是直接更新的onTouch()
事件画布在清除它。这不是在视图中绘制的东西(假设这是你想要的)的假定方式。
相反,你应该存储开始和矩形的当前坐标,并利用它们在onDraw()
事件绘制实际矩形(Adnroid内清除画布的无效部分为你后)。如果画布需要重新绘制Android将发出此事件,所以你需要告诉,这是需要在onTouch()
事件,通过使用invalidate()
方法:
class myView extends View { // or some other View-based class
boolean drawRectangle = false;
PointF beginCoordinate;
PointF endCoordinate;
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
drawRectangle = true; // Start drawing the rectangle
beginCoordinate.x = event.getX();
beginCoordinate.y = event.getY();
endCoordinate.x = event.getX();
endCoordinate.y = event.getY();
invalidate(); // Tell View that the canvas needs to be redrawn
break;
case MotionEvent.ACTION_MOVE:
endCoordinate.x = event.getX();
endCoordinate.y = event.getY();
invalidate(); // Tell View that the canvas needs to be redrawn
break;
case MotionEvent.ACTION_UP:
// Do something with the beginCoordinate and endCoordinate, like creating the 'final' object
drawRectangle = false; // Stop drawing the rectangle
invalidate(); // Tell View that the canvas needs to be redrawn
break;
}
return true;
}
protected void onDraw(Canvas canvas) {
if(drawRectangle) {
// Note: I assume you have the paint object defined in your class
canvas.drawRect(beginCoordinate.x, beginCoordinate.y, endCoordinate.x, endCoordinate.y, paint);
}
}
}
你清理2个矩形之间的印刷品吗?添加这样一个功能:
void clearCanvas()
{
canvas.drawRect(0,0, width, height, paint);
}
对不起亲爱的我给你整个活动女巫我使用,并在画布上绘制矩形。
public class CanvasExample extends Activity
{
/** Called when the activity is first created. */
RelativeLayout relMainOperationLayout;
RelativeLayout relTabHeader;
//RelativeLayout relMidalLayout;
RelativeLayout relBelowLayout;
Context myContext;
DrawCanvas drawCanvas;
static boolean loadFlage=true;
BibleHelper bibleHelper;
Bitmap mainBitmap;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
myContext=CanvasExample.this;
bibleHelper=new BibleHelper(CanvasExample.this,myContext);
bibleHelper.setFullScreen();
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);
mainBitmap=getIconDrawable(R.drawable.splash);
drawCanvas=new DrawCanvas(CanvasExample.this,myContext);
//drawCanvas.setBackgroundColor(Color.YELLOW);
//drawCanvas.setBackgroundDrawable(CanvasExample.this.getResources().getDrawable(R.drawable.splash));
drawCanvas.setBackgroundDrawable(new BitmapDrawable(mainBitmap));
RelativeLayout.LayoutParams drawParams=new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
drawParams.addRule(RelativeLayout.BELOW, relTabHeader.getId());
//relMidalLayout.addView(drawCanvas,drawParams);
relMainOperationLayout.addView(drawCanvas,drawParams);
// mainImageView=new ImageView(CanvasExample.this);
//
// RelativeLayout.LayoutParams mainParams=new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,200);
// relMainOperationLayout.addView(mainImageView,mainParams);
// mainImageView.setBackgroundDrawable(CanvasExample.this.getResources().getDrawable(R.drawable.ic_launcher));
setContentView(relMainOperationLayout);
}
class DrawCanvas extends View
{
Context drawContext;
Activity drawActivity;
ImageView image;
Paint mPaint;
int left=0,right=0,top=0,bottom=0;
Canvas passCanvas;
//Bitmap bitmapOrg;
// bitmapOrg;
public DrawCanvas(Activity activity,Context context)
{
super(activity);
this.drawActivity=activity;
this.drawContext=context;
//bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.splash);
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);
mPaint.setFilterBitmap(true);
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();
//System.err.println("Get X->"+event.getX());
if(tempX>right)
{
right=right+1;
}
else
{
right=right-1;
}
//System.err.println("Get Y->"+event.getY());
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");
CanvasExample.loadFlage=false;
onDraw(passCanvas=new Canvas());
/*
bibleHelper.showErrorLog("Start X -->"+left);
bibleHelper.showErrorLog("Real X -->"+event.getX());
bibleHelper.showErrorLog("End X-->"+right);
bibleHelper.showErrorLog("Start Y-->"+top);
bibleHelper.showErrorLog("Real Y-->"+top);
bibleHelper.showErrorLog("End Y-->"+bottom);
*/
Bitmap croppedBmp = Bitmap.createBitmap(mainBitmap,left,top,right,bottom);
final Dialog dialog = new Dialog(CanvasExample.this);
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Title...");
dialog.setCancelable(true);
ImageView image = (ImageView) dialog.findViewById(R.id.main);
image.setImageBitmap(croppedBmp);
Button btnClose=(Button) dialog.findViewById(R.id.btnClose);
btnClose.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
dialog.dismiss();
}
});
dialog.show();
break;
default:
break;
}
return true;
}
});
}
@Override
protected void onDraw(Canvas canvas)
{
canvas.drawRect(left, top, right, bottom, mPaint);
}
}
private Bitmap getIconDrawable(int imageId)
{
//Drawable rtnDrawable = null;
Bitmap imageBitmap=null;
try
{
int getImageWH[];
imageBitmap = BitmapFactory.decodeResource(getResources(),imageId);
int IW = imageBitmap.getWidth();
int IH = imageBitmap.getHeight();
bibleHelper.showErrorLog("Icon Width->" + IW);
bibleHelper.showErrorLog("Icon Height->" + IH);
WindowManager winManager = (WindowManager) CanvasExample.this.getSystemService(Context.WINDOW_SERVICE);
int screenwidth = winManager.getDefaultDisplay().getWidth();
int screenheight = winManager.getDefaultDisplay().getHeight();
getImageWH = bibleHelper.getObjectWidthHeight(screenwidth,screenheight, IW, IH);
bibleHelper.showErrorLog("Get Icon Width->" + getImageWH[0]);
bibleHelper.showErrorLog("Get Icon Height->" + getImageWH[1]);
imageBitmap = Bitmap.createScaledBitmap(imageBitmap, getImageWH[0],getImageWH[1], false);
bibleHelper.showErrorLog("New Width-->"+imageBitmap.getWidth());
bibleHelper.showErrorLog("New Height-->"+imageBitmap.getHeight());
//rtnDrawable = (Drawable) new BitmapDrawable(imageBitmap);
} catch (Exception ex) {
bibleHelper.showErrorLog("Convert Icon Exception-->"+ ex.toString());
}
//return rtnDrawable;
return imageBitmap;
}
}
在这种BibleHelper是辅助类巫婆用于显示一些信息和日志。
case MotionEvent.ACTION_MOVE:
upx = event.getX();
upy = event.getY();
canvas.drawRect(downx, downy, upx, upy, paint);
}
choosenImageView.invalidate();
break;
此代码导致它。因为你在这里创造了许多矩形。相反,在onDraw(Canvas canvas)
拥有的drawRect方法和使用无效的所有事件。希望这可以帮助。
如果我理解你纠正你希望用户在屏幕上绘制矩形,然后你会绘制在显示屏上。
我想你可以只画一个点了用户按压,只是为了给用户反馈,当他完成由矩形绘制你的替代品
或绘制矩形的线条,让用户开始绘制,你必须从一开始就以他的手指一条线,当用户改变方向开始从用户改变了方向和手指一个新行,那么当用户返回到开始你有一个矩形画为4线