レイアウトに複数のカスタムビューを描画しようとしていますが、最初に追加したビューのみが描画されます。
私のカスタムビュークラスは次のとおりです。
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);
}
}
また、線形レイアウトの方向が水平であることを確認してください
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加