这是上一个问题: 如何在 Android 上使用用户触摸事件创建可调整大小的矩形?
忘记移动矩形,矩形本身不会被绘制。下面是我的代码。我没有收到任何错误,但我根本看不到矩形或角落。
public class DrawView extends View {
private Paint paint;
private ArrayList<ColorBall> colorballs = new ArrayList<ColorBall>();
private int groupID = -1;
private int ballID = 0;
private Canvas canvas;
Point[] pts = new Point[4];
int left, top, right, bottom;
private Bitmap bm;
private BitmapDrawable bmDrawable;
public DrawView(Context context) {
super(context);
paint = new Paint();
setFocusable(true);
canvas = new Canvas();
}
public DrawView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
public DrawView(Context context, AttributeSet attrs)
{
super(context, attrs);
paint = new Paint();
setFocusable(true);
canvas = new Canvas();
}
// -------------------------------------------------------------------//
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
//super.onDraw(canvas);
this.setBackgroundColor(Color.LTGRAY);
paint.setStrokeWidth(5);
paint.setColor(Color.GREEN);
if (pts[3] == null) {
return;
}
int left, top, right, bottom;
left = pts[0].x;
top = pts[0].y;
right = pts[0].x;
bottom = pts[0].y;
for (int i = 1; i < pts.length; i++) {
left = left > pts[i].x ? pts[i].x : left;
top = top > pts[i].y ? pts[i].y : top;
right = right < pts[i].x ? pts[i].x : right;
bottom = bottom < pts[i].y ? pts[i].y : bottom;
}
paint.setAntiAlias(true);
paint.setDither(true);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeWidth(5);
// draw stroke
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.parseColor("#AADB1255"));
paint.setStrokeWidth(2);
canvas.drawRect(left + colorballs.get(0).getWidthOfBall() / 2,
top + colorballs.get(0).getWidthOfBall() / 2,
right + colorballs.get(2).getWidthOfBall() / 2,
bottom + colorballs.get(2).getWidthOfBall() / 2, paint);
//fill the rectangle
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.parseColor("#55DB1255"));
paint.setStrokeWidth(0);
canvas.drawRect(left + colorballs.get(0).getWidthOfBall() / 2,
top + colorballs.get(0).getWidthOfBall() / 2,
right + colorballs.get(2).getWidthOfBall() / 2,
bottom + colorballs.get(2).getWidthOfBall() / 2, paint);
// draw corners
bm = BitmapFactory.decodeResource(getResources(), R.drawable.circle);
bmDrawable = new BitmapDrawable(getResources(), bm);
// draw balls on canvas
paint.setColor(Color.BLUE);
paint.setTextSize(15);
paint.setStrokeWidth(0);
for (int i = 0; i < colorballs.size(); i++) {
ColorBall ball = colorballs.get(i);
canvas.drawBitmap(bmDrawable.getBitmap(), ball.getX(), ball.getY(), paint);
canvas.drawText("" + (i + 1), ball.getX(), ball.getY(), paint);
}
}
}
这是xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<View
android:id="@+id/drawview"
android:layout_width="fill_parent"
android:layout_height="match_parent"
class="com.example.androiddraw.DrawView" />
</RelativeLayout>
我有 ColorBall 类,其中包含所有正确的设置器和获取器。我错过了什么?
提前致谢。