【发布时间】:2023-03-22 14:41:01
【问题描述】:
我是 android 编程新手,我创建了一个应用程序来绘制一个矩形和一个圆形。现在我想画椭圆和线条。我知道drawLine取起点x,起点y,终点x和终点y。
这是我在 mycustomView.java 中尝试过的,但我只能将线从左上角拖到右下角,从右下角拖到左上角?如何让它适用于所有方向?
protected void onDraw(Canvas canvas) {
this.canvas = canvas;
canvas.drawColor(Color.WHITE);
for (int i = 0; i < numberShapes; i++) {
paint.setColor(Color.parseColor("#" + Integer.toHexString(Integer.parseInt(shapes[i].getColor())).substring(2))); //avoids alpha
paint.setStrokeWidth(shapes[i].getBorder());
//some code here....
else if(shapes[i].getShapeType().equals("Ellipse")){
RectF rect= new RectF(shapes[i].getX(),shapes[i].getY(),shapes[i].getX() + shapes[i].getWidth(),shapes[i].getY() + shapes[i].getHeight());
canvas.drawOval(rect,paint);
}
else if(shapes[i].getShapeType().equals("StraightLine")){
canvas.drawLine(shapes[i].getX(),shapes[i].getY(),shapes[i].getX() + shapes[i].getWidth(),shapes[i].getY() + shapes[i].getWidth(),paint);
}
}
}
}
这是我的 viewShapes.java 和我的动作事件
public boolean onTouch(View v, MotionEvent ev) {
//Circle is the default shape if can't find the key
String selectedShapeDrawing = getActivity().getSharedPreferences("settings", Context.MODE_PRIVATE).getString("selectedShapeDrawing", "Circle");
int x = (int) ev.getX(); int y = (int) ev.getY();
int dX, dY;
int action = MotionEventCompat.getActionMasked(ev);
switch (action){
case MotionEvent.ACTION_DOWN:
mLastTouchX = x; mLastTouchY = y;
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
if ((selectedShapeDrawing.equals("Rectangle")) || selectedShapeDrawing.equals("Circle") || selectedShapeDrawing.equals("Ellipse")) {
//some code here... }
if(selectedShapeDrawing.equals("StraightLine")){
if((x>mLastTouchX) && (y>mLastTouchY)) {
storeShape(selectedShapeDrawing, mLastTouchX, mLastTouchY, x, y);
}
else if((x<mLastTouchX) && (y<mLastTouchY)) {
storeShape(selectedShapeDrawing, x, y, mLastTouchX, mLastTouchY);
}
else if((x>mLastTouchX) && (y<mLastTouchY)) {
storeShape(selectedShapeDrawing,mLastTouchX, y,x,mLastTouchY);
}
else if((x<mLastTouchX) && (y>mLastTouchY)) {
storeShape(selectedShapeDrawing, x,mLastTouchY,mLastTouchX, y);
}
任何帮助将不胜感激!
编辑:这是我的商店形状
private void storeShape(String shape, int x, int y, int deltaX, int deltaY)
{
int selectedColor = getActivity().getSharedPreferences("settings", Context.MODE_PRIVATE).getInt("selectColor", 0);
ContentValues contentValues = new ContentValues();
contentValues.put(SchemeShapes.Shape.SHAPE_TYPE, shape);
contentValues.put(SchemeShapes.Shape.SHAPE_X, x);
contentValues.put(SchemeShapes.Shape.SHAPE_Y, y);
contentValues.put(SchemeShapes.Shape.SHAPE_RADIUS, Math.max(deltaX, deltaY));
contentValues.put(SchemeShapes.Shape.SHAPE_WIDTH, deltaX);
contentValues.put(SchemeShapes.Shape.SHAPE_HEIGHT, deltaY);
contentValues.put(SchemeShapes.Shape.SHAPE_BORDER_THICKNESS, 10);
contentValues.put(SchemeShapes.Shape.SHAPE_COLOR, selectedColor);
resolver.insert(SchemeShapes.Shape.CONTENT_URI, contentValues);
}
【问题讨论】:
-
什么是storeshape??
-
它存储所选形状的半径、高度...等
标签: android motionevent