选择选项卡时尝试在画布上重绘:
@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 检查)它仅在创建布局时第一次绘制。