Вот предыдущий вопрос: How to create a resizable rectangle with user touch events on 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 со всеми соответствующими сеттеров и добытчиками. Что мне не хватает?
Заранее спасибо.
спасибо WindsurferOak. У проблемы OnDraw была проблема. Исправлено, и теперь он работает отлично. – siriD