2016-10-12 38 views
0

我試圖用帆布畫在Android的單行帆布的DrawLine是無形

我的類:

public class LineDrawer extends View { 

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

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Paint paint = new Paint(); 
     paint.setColor(Color.BLACK); 
     paint.setStyle(Paint.Style.FILL_AND_STROKE); 
     paint.setStrokeWidth(10); 

     float left = 20; 
     float top = 20; 
     float right = 50; 
     float bottom = 100; 

     canvas.drawLine(left, top, right, bottom, paint); 

    } 
} 

我的主要活動:

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     LineDrawer lineDrawer = new LineDrawer(this); 

     setContentView(R.layout.activity_Main); 
    } 
} 

我不能找到問題出在哪裏,我嘗試在互聯網上的所有解決方案,但沒有發生任何事情,仍然是一個空白的活動..

我應該導入一些代碼嗎?

+0

'setContentView(lineDrawer)' – pskink

+0

如果我想爲此活動使用xml文件,該怎麼辦? – Migra

+0

所以使用'setContentView(R.layout.activity_Main)' – pskink

回答

0

lineDrawer創建但不添加任何地方。僅僅創建一個視圖是不夠的,你需要將它添加到當前顯示的視圖中,並考慮和繪製。您有兩種選擇:

  • 將它添加到您的XML佈局。您必須將以下構造函數添加到您的自定義視圖。

    public LineDrawer(Context context, AttributeSet attrs) { super(context, attrs); }

  • 使用addView()。無論如何,鑑於你的例子有多簡單,我將使用第一個(普通)方法。

作爲附加評論,應該在視圖初始化時創建Paint paint對象,這是一個代價高昂的操作。有關詳細信息,請參閱original documentation

+0

當一個實例是從一個View的類繼承中創建的,當編譯器試圖繪製視圖時,它會去掉onDraw()方法,是不是正確? – Migra

+0

只需創建一個類是不夠的,您需要將其添加到當前顯示的視圖中以進行考慮和繪製。另外,爲了正確性,編譯器不會畫任何東西,就是操作系統。我編輯了答案。 –

+0

謝謝,但你能告訴我如何將這一行添加到我的視圖? addContentView需要兩個參數上下文和LayoutParms – Migra