0

タブが選択されているときにキャンバスに再描画しようとしています:

@Override
public void onTabChanged(String tabId) {
   for(int i=0;i<mTabHost.getTabWidget().getChildCount();i++)
        {
         mTabHost.getTabWidget().getChildAt(i).setSelected(false); //unselected
        }
         mTabHost.getTabWidget().getChildAt(mTabHost.getCurrentTab()).setSelected(true); // selected
}

次に、カスタムビューで次のことを行います:

public class TabIndicator extends LinearLayout {
...
public void setSelectedTab(boolean isSelected){
    this.isSelected = isSelected;

    if(isSelected){
        this.invalidate();
        this.postInvalidate();
    }
}
 @Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if(isSelectedTab()){
        Paint paint2 = new Paint();
        Path path2 = new Path();
        paint2.setStyle(Paint.Style.STROKE);
        paint2.setStrokeWidth(10);
        paint2.setColor(Color.parseColor(getResources().getString(R.string.NAVY_BLUE)));
        path2.moveTo(width*(1/4f), height);
        path2.lineTo(width*(3/4f), height);
        path2.close();
        canvas.drawPath(path2, paint2);
    }
}

draw を繰り返し呼び出しても何も起こりません。(log.d で確認) レイアウトが作成されたときにのみ描画されます。

4

1 に答える 1

2

ViewGroup を拡張しています

http://developer.android.com/reference/android/view/ViewGroup.html

デフォルトでonDraw()は、ViewGroup オブジェクトに対しては呼び出されません。代わりに、オーバーライドできますdispatchDraw()

または、コンストラクターViewGroupを呼び出して描画を有効にすることもできます。setWillNotDrawEnabled(false)

https://groups.google.com/forum/?fromgroups#!topic/android-developers/oLccWfszuUo

Romain Guy のコメントを確認する

以前に回答した同様の質問へのリンクを見つけることができました。以下のリンクを確認する例があります

アプリケーションで onDraw メソッドが呼び出されない

于 2013-09-17T18:13:21.937 に答える