在我的應用程序中,當用戶觸摸屏幕時,繪製一個圓,並且如果圓點已經在點a處繪製,則不能在那裏繪製另一個圓。畫圓不準確
當我使用canvas.drawCircle(...)時,它是無情的。如果我點擊靠近屏幕的頂部,那麼它只是非常細微地丟失了我輕敲它的位置(稍微向左或向右)。我越走越遠離我的圈子就是我觸摸的地方。如果我觸摸屏幕的左側,則該圓圈會進入觸摸點的右側,如果我觸摸屏幕的右側,則該圓圈位於左側。
這裏是我的代碼:
public void onCreate(...){
super.onCreate();
setcontentView(...);
drawnX = new ArrayList<Float>();
drawnY = new ArrayList<Float>();
layout = (ImageView)findViewById(R.id.layout);
layout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent me) {
newY = me.getY();
newX = me.getX();
int action = me.getAction();
if (action==0){
Log.v(tag, "New Touch");
Log.i(tag, String.valueOf("Action " + action +
" happened at X,Y: " + "("+newX+","+newY + ")"));
getDistance(newX, newY);
}
return true;
}
});
@Override
public void onResume(){
super.onResume();
display = getWindowManager().getDefaultDisplay();
screenHeight = display.getHeight();
screenWidth = display.getWidth();
bitmap = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
paint = new Paint();
circleRadius = screenHeight/50;
}
public void getDistance(float xNew, float yNew){
// here I compare the new touch x and y values with the x and y values saved
// in the Array Lists I made above. If distance is > circleRadius, then:
drawPoint(xNew, yNew)
}
public void drawPoint(final float x, final float y){
minDistance = Float.NaN;
new Thread(new Runnable(){
@Override
public void run(){
paint.setColor(Color.RED);
canvas.drawCircle(x, y, circleRadius, paint);
layout.post(new Runnable(){
@Override
public void run(){
layout.setImageDrawable(new BitmapDrawable(bitmap));
//I have also tried setImageBitmap and setBackgroundDrawable
}
});
}
}).start();
}
詮釋了這一切的過程中,我也做了一些記錄在drawPoint,它表明了x和y座標匹配這是在onTouch得到。
我也試過maknig它LinearLayout,但是有相同的效果。
而且,位圖大小與屏幕大小和畫布大小相匹配。同時,爲了測試我做
canvas.drawARGB(...)
,它覆蓋了整個屏幕,所以我知道這不只是位圖沒有被拉伸到了谷底。佈局的高度小於其他所有的高度,並且佈局的寬度與所有其他佈局相同,但是當我在我的onResume中使用layout.getHeight和layout.getWidth時,它們總是返回0,所以我不能真的使用它。
我真的不知道是什麼原因造成的。我也嘗試了兩個模擬器並得到了相同的響應。任何幫助將不勝感激。另外,如果我點擊繪製的圓圈(朝向屏幕底部),另一個圓圈將被繪製在該圓圈上方,但是如果我點擊之前拍攝的地方,則不會繪製新的圓圈,這真的是想要發生的事情。該圓圈只是沒有正確顯示在屏幕上。
當我固定screenHeight和screenWidth實際上是layout.getHeight()和layout.getWidth()時,解決了這個問題。我不得不將它包裝在新的處理程序()中。儘管如此,postDelayed(runnable,5000)爲它們返回一個值。在8小時的發佈時限結束後,我會發布完整的答案 – Jakar