我想問題很簡單。繪圖到畫布 - 沒有繪製其他項目
我想盡快畫一個點到畫布上。點將被繪製到我觸摸的位置。接下來,我想在屏幕上繪製另一個點,但不是第一個點的位置。意思是我想阻止在另一幅圖像上繪製圖像。
我試圖archieve與下面的代碼:
活動課
public class Draw extends Activity {
DrawView drawView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set full screen view
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
drawView = new DrawView(this);
setContentView(drawView);
drawView.requestFocus();
}
}
Canvas類
public class DrawView extends View implements OnTouchListener {
private static final String TAG = "DrawView";
List<Point> points = new ArrayList<Point>();
Vector<Bitmap> bitmaps = new Vector<Bitmap>();
Paint paint = new Paint();
public DrawView(Context context) {
super(context);
setFocusable(true);
setFocusableInTouchMode(true);
this.setOnTouchListener(this);
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
for (Point point : points) {
canvas.drawBitmap(bitmaps.get(point.i), point.x, point.y, paint);
}
}
public boolean onTouch(View view, MotionEvent event) {
Log.d("Touch","Touch");
Log.d("Points", "" + points.size());
Log.d("Bitmaps", "" + bitmaps.size());
int i = 0;
for (Point point : points) {
int height = bitmaps.get(i).getHeight();
int width = bitmaps.get(i).getWidth();
//Log.d("dimensions", height + ", " + width);
for (int x = 0; x <= width; x++) {
if (Math.floor(point.x + x) == Math.floor(event.getX())) {
points.get(i).isTaken = true;
Log.d("isTakenX", "" + point.isTaken);
break;
}
for (int y = 0; y <= height; y++) {
if (Math.floor(point.y + y) == Math.floor(event.getY())) {
points.get(i).isTaken = true;
Log.d("isTakenY", "" + point.isTaken);
break;
}
}
}
i++;
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Log.d("EventDown","DOWN");
boolean isTaken = false;
for (Point point : points) {
if (point.isTaken) {
isTaken = true;
}
}
if (!isTaken) {
bitmaps.add(BitmapFactory.decodeResource(getResources(), R.drawable.greenstar));
Point point = new Point();
point.x = event.getX();
point.y = event.getY();
point.i = bitmaps.size() - 1;
points.add(point);
//Log.d("pointClick",point.toString());
invalidate();
return true;
}
}
return false ;
}
}
class Point {
float x, y;
int i;
boolean isTaken = false;
@Override
public String toString() {
return i + ": " + x + ", " + y;
}
}
在onTouch方法,你可以看到我是如何摸清我不想透支的圖像位置。我保存所有圖像,並將其繪製到列表中以便修改它們。接下來,我檢查圖像在屏幕上佔用了多少空間,以及是否只點擊了該空間。
但是,在第一張圖像畫到畫布上之後,我無法畫出另一張。似乎程序停留在「isTaken」。可能我的對數如何檢查空間是否是錯誤的。但是,無法弄清楚什麼是錯誤的。
你有想法嗎?
THanks預先
嘿,感謝您的幫助。其實我會畫正方形(後來的方形圖像)到屏幕上,對不起,錯誤的信息。第一個建議:之前嘗試過,因爲另一個錯誤而導致異常,因此更改了它。第二個建議:謝謝,這也會幫助我與廣場!我應該檢查舊廣場和新廣場的左上邊框之間的距離。第三條建議:剛纔我自己發現了這個錯誤。不過,如果我只是測量舊廣場和新廣場之間的距離,不需要檢查。非常感謝你。 – JustBasti 2012-08-09 19:37:18
np,如果出現更多問題,只需向SO彙報。 – RaphMclee 2012-08-09 20:31:34
處理您的想法。謝謝!我認爲我的大腦今天已經陷入困境:/ – JustBasti 2012-08-09 21:02:42