2014-10-19 106 views
0

我試圖在佈局中繪製多個自定義視圖,但只添加繪製的第一個視圖。繪製多個自定義視圖

我的自定義視圖類:

public ButtonView(Context context, int k) { 
    super(context); 
    this.setX(20+k*80); 
    init(); 
} 

private void init(){ 
    paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    paint.setColor(0x99ffffff); 
} 

@Override 
protected void onDraw(Canvas cv){ 
    cv.drawText(""+getX(), 0, 80, paint); 
} 

我顯示的x文本協調,以便知道哪些圖繪。

這是我主要活動的onCreate的代碼。

blay = (LinearLayout) this.findViewById(R.id.buttonslayout); 
for(int k=0; k<10; k++){ 
    ButtonView e = new ButtonView(this,k); 
    blay.addView(e); 
} 

當我運行應用程序時,只繪製第一個視圖。我在正確的位置獲得了以白色顯示的「20.0」,但其餘視圖未顯示。通過調試應用程序,我意識到視圖的實例已創建,但由於某些原因,它們不會顯示。此外,我試圖使用invalidate並覆蓋onMeasure方法,但仍然無法正常工作。

回答

1

我修改了你的自定義視圖,請檢查這是否工作。我猜你的代碼的主要問題是一個視圖佔據整個屏幕。所以我重寫onMeasure功能

package com.example.stack2; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.view.View; 

public class ButtonView extends View{ 
    public ButtonView(Context context, int k) { 
     super(context); 
     //this.setX(20+k*80); 
     init(); 
    } 

    public ButtonView(Context context, AttributeSet attrs, int defStyleAttr, 
      int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
     // TODO Auto-generated constructor stub 
    } 

    public ButtonView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     // TODO Auto-generated constructor stub 
    } 

    public ButtonView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
    } 

    public ButtonView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    Paint paint; 
    private void init(){ 
     paint = new Paint(); 
     paint.setColor(Color.BLACK); 
     paint.setTextSize(20); 
    } 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     // TODO Auto-generated method stub 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     //e.measure(0, 0); 
     getLayoutParams().width=100; 
    } 
    @Override 
    protected void onDraw(Canvas cv){ 
     super.onDraw(cv); 

     cv.drawText(""+getX(), 0, cv.getHeight()/2, paint); 
    } 
} 

另外,還要確保您的線性佈局的方向是水平

0

嘗試設置一些不同的顏色給每個view..you就能看到它們。 還將佈局參數設置爲您的自定義視圖。