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

检查罗曼盖伊的评论

我可以找到我之前回答的类似问题的链接。有一个例子检查下面的链接

我的应用程序中未调用 onDraw 方法

于 2013-09-17T18:13:21.937 回答