2015-05-27 62 views
0

對於初學者來說,我個人總是很難理解自動編碼和手動編碼的情況。我特別遇到麻煩的一個領域是瞭解android開發中android.view.View類的onDraw(Canvas canvas)方法。我有一些沒有錯誤的代碼,但是當它運行我的onDraw(畫布畫布)時似乎被忽略。我不認爲編譯器知道我想繪製的位置,我不知道如何讓它知道。下面是一些我的代碼(僅添加相關的代碼。如果你需要更多的只是評論,我會添加更多的相應。):關聯onDraw(視圖視圖)和SurfaceView

主要活動

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    backGround = (RelativeLayout) findViewById(R.id.bG); 
    GFX screen = new GFX(); 
} 

GFX

public class GFX extends Activity{ 
    MyBringBack ourView; 
    @Override 
    protected void onCreate(Bundle savedInstanceCreate){ 
     super.onCreate(savedInstanceCreate); 
     ourView = new MyBringBack(this); 
     setContentView(ourView); 
    } 
} 

MyBringBack

public class MyBringBack extends View { 

    Paint paint = new Paint(); 

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

    } 

    @Override 
    protected void onDraw(Canvas canvas){ 
     super.onDraw(canvas); 
     paint.setColor(Color.BLACK); 
     paint.setStrokeWidth(3); 
     canvas.drawRect(30, 30, 80, 80, paint); 

    } 

} 

我一直在關注youtube上的these教程。

如何指定要繪製的位置?

回答

0

所以我最終發現自己只是增加setContentView(new MyBringBack(this));的伎倆

0

我不知道你在這裏做什麼。您不應該在其他活動中實例化活動。你能詳細說明嗎?

至於爲什麼onDraw不起作用。這可能是因爲您應該致電

Canvas.save() 

您的繪圖完成後。此外,如果你想確保OnDraw中被調用,你需要做的

someView.invalidate() 

這將告訴視圖調用

onMeasure and onDraw