2017-05-03 14 views
0

私は、画面上の利用可能なスペースをすべて埋めるビューを作成しようとしています。 Iv'eはmatch_parentに私のビューのレイアウトパラメータを設定し、RectCanvasに描いたときにgetHeight()getWidth()を使いましたが、画面の約3分の2しかまだ満たしていません。CustomViewが空きスペースを埋めることはありません

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_height="match_parent" 
android:layout_width="match_parent" 
xmlns:beat_box="http://schemas.android.com/tools"> 

<com.yotam.aprivate.demo.mybeatbox.Views.BeatBox 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    beat_box:my_color="5D32EA"> 
</com.yotam.aprivate.demo.mybeatbox.Views.BeatBox> 
</RelativeLayout> 

のCustomView:あなたはこの行の幅と高さ反転している

public class BeatBox extends View { 
private int color; 
private Context context; 
private Paint paintBox = new Paint(); 
private Paint paintBackground = new Paint(); 

public BeatBox(Context context, @Nullable AttributeSet attrs) { 
    super(context, attrs); 
    this.context = context; 
    color = getAttrColor(attrs); 
    initDrawing(); 
} 
@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawRect(0,0,canvas.getHeight(), canvas.getWidth(), paintBackground); //this.getHeight() this.getWidth() also doesn't work 
    paintBackground.setShader(new LinearGradient(0, 0, getWidth() , getHeight(), Color.parseColor("#cb356b"), Color.parseColor("#bd3f32"), Shader.TileMode.MIRROR)); 
    super.onDraw(canvas); 
} 

It doesn't fill the whole layout, I want it to fill the white area

答えて

3

drawRect()方法の

canvas.drawRect(0,0, canvas.getWidth(),canvas.getHeight(), paintBackground); 
1

パラメータは以下の通りです:

drawRect(float left, float top, float right, float bottom, Paint paint) 

あなたはcustom viewheightはデバイスwidthと同じである理由です、bottomとしてrightとしてcanvas.getHeight()canvas.getWidth()使用しています。

SOLUTION:

あなたはbottom

としてrightとしてcanvas.getWidth()canvas.getHeight()を使用する必要があります更新し、以下のようonDraw()方法:

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), paintBackground); 
    paintBackground.setShader(new LinearGradient(0, 0, getWidth() , getHeight(), Color.parseColor("#cb356b"), Color.parseColor("#bd3f32"), Shader.TileMode.MIRROR)); 

    super.onDraw(canvas); 
} 

希望これは役立ちます〜

関連する問題