2014-02-22 19 views
0

我一直在試圖在我的應用程序中繪製畫布,但我無法精確地畫出要點。我使用的是OnTouchListener,並將歷史指針中的每一點都添加到畫布上,並用黑色繪製。如何在Android中精確繪製(例如一行)?

不幸的是,它不起作用,因爲它沒有繪製用戶觸及的所有點(例如,當跟蹤一條線時)。我會告訴你一個例如

enter image description here

我正在使用的代碼如下:

public class DrawView extends View implements OnTouchListener { 
    List<Point> points = new ArrayList<Point>(); 
    Paint paint = new Paint(); 

    public DrawView(Context context) { 
     super(context); 
     setFocusable(true); 
     setFocusableInTouchMode(true); 

     this.setOnTouchListener(this); 

     paint.setColor(Color.BLACK); 
     paint.setAntiAlias(true); 
    } 

    public DrawView(Context context,AttributeSet attrs) { 
     super(context,attrs); 
     setFocusable(true); 
     setFocusableInTouchMode(true); 

     this.setOnTouchListener(this); 

     paint.setColor(Color.BLACK); 
     paint.setAntiAlias(true); 
    } 
    public DrawView(Context context,AttributeSet attrs,int defStyle) { 
     super(context,attrs,defStyle); 
     setFocusable(true); 
     setFocusableInTouchMode(true); 

     this.setOnTouchListener(this); 

     paint.setColor(Color.BLUE); 
     paint.setAntiAlias(true); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     for (Point point : points) { 
      canvas.drawCircle(point.x, point.y, 12, paint); 
     } 
    } 

    public boolean onTouch(View view, MotionEvent event) { 
     Point point = new Point(); 

     final int historySize = event.getHistorySize(); 
     final int pointerCount = event.getPointerCount(); 
     for (int h = 0; h < historySize; h++) { 
      for (int p = 0; p < pointerCount; p++) { 
       point.x=event.getHistoricalX(p, h); 
       point.y=event.getHistoricalY(p, h); 
       points.add(point); 
       invalidate(); 
       Log.d("debug","pointer: "+ 
        event.getPointerId(p)+" "+ event.getHistoricalX(p, h)+" "+ event.getHistoricalY(p, h)); 
      } 
     } 

     /*point.x = (int)event.getX(); 
     point.y = (int)event.getY();*/ 
     Log.d("debug", "really saved: "+ 
       event.getX()+" "+ event.getY()); 
     //points.add(point); 
     //invalidate(); 
     return true; 
    } 
} 
class Point { 
    float x, y; 
    @Override 
    public String toString() { 
     return x + ", " + y; 
    } 
} 

任何想法? 預先感謝您

+0

什麼不對您的樣本圖像? – pskink

回答

3

問題是,您只繪製了您獲取觸摸事件的點。如果用戶快速移動,您只能獲得一些要點。解決方案是在連續的點之間畫線,而不僅僅是點本身。