2013-05-02 103 views
0

我還在學習Android,我決定下載一個示例繪圖應用程序來擺弄它,並學習一下Android如何處理圖形/繪圖/繪畫。我的代碼在左上角顯示綠色和紅色的'V',在你觸摸的地方顯示紅色的點。 但是,我發現每次都在重畫屏幕,所以我不能將它用作繪畫工具。這幾乎就像我將一桶白色油漆傾倒在表面上然後重新繪製圓圈一樣。我該如何做到這一點,以便你的手指後面的紅點留下痕跡?這是代碼。如何繪製一個離線的點

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.View.OnTouchListener; 
import android.view.ViewGroup.LayoutParams; 

public class MainActivity extends Activity implements OnTouchListener { 
private float x; 
private float y; 
private int moveX; 
Paint paint = new Paint(); 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    MyCustomPanel view = new MyCustomPanel(this); 

    ViewGroup.LayoutParams params = 
         new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, 
                LayoutParams.FILL_PARENT); 
    addContentView(view, params); 
    view.setOnTouchListener(this); 

} 
private class MyCustomPanel extends View { 

    public MyCustomPanel(Context context) { 
     super(context); 

    } 
    @Override 
    public void onDraw(Canvas canvas) { 

     paint.setColor(Color.GREEN); 
     paint.setStrokeWidth(6); 

     canvas.drawLine(moveX,10,50,50,paint); 
     paint.setColor(Color.RED); 

     canvas.drawLine(50, 50, 90, 10, paint); 
     canvas.drawCircle(50, 50, 3, paint); 
     moveX++; 
     canvas.drawCircle(x,y,3,paint); 
    } 
} 
public boolean onTouch(View v, MotionEvent event) { 
    x = event.getX(); 
    y = event.getY(); 
    v.invalidate(); 
    return true; 
} 
} 
+0

檢查樣品中fingerpaint樣本 – Raghunandan 2013-05-02 05:51:35

回答

0

例如,將圓圈保存在ArrayList中。製作一個ArrayList,並保存觸摸的每個xy座標作爲一個點。下面的代碼只是從頭開始,目前無法測試,所以如果有什麼不工作,讓我知道,我會舉一個例子,當我在家。

private ArrayList<Point> pointList = new ArrayList<Point> 

然後在觸摸:

 Point xyPoint = new Point(); 
    xyPoint.x = event.getX(); 
    xyPoint.y = event.getY(); 
    pointList.add(xyPoint); 
    invalidate(); 

和onDraw有,做一個for循環得到的所有點並畫出每一個:

 for(int i=0;i<pointList.size();i++){ 

      Point p = pointList.get(i); 
      canvas.drawCircle(p.x, p.y, 2, paint); 

     } 

此畫界與2px的直徑你的手指觸摸的地方。但這僅僅是一個簡單的例子,還有很多你可以做的,而且看起來更好。你應該瞭解戰平路徑和如何繪製rects和ovales等。這裏是如何在路徑畫出一個很好的例子:

http://android-er.blogspot.de/2011/08/drawpath-on-canvas.html