我正在繪製一個滑動條,當頁面滑動發生在viewpager中時。所以我在ViewPager onPageChange事件中繪製它。問題是; onDraw方法是(有時)未調用。 同樣的代碼在其他項目中運行,但不在這一個,這使得它更怪異。自定義視圖onDraw方法有時未調用
My SliderBar View Class;
public class SliderBar extends View {
Paint p = new Paint();
int startX;
int width;
Rect r = new Rect();
public SliderBar(Context c,int x,int width){
super(c);
this.startX = x;
this.width = width;
this.setWillNotDraw(false);// these didnt fix
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
p.setColor(Color.parseColor("#bbbbbbbb"));
p.setAntiAlias(true);
p.setStyle(Paint.Style.FILL);
r.set(startX,0,startX+width,500);
canvas.drawRect(r,p);
}
}
我的呼叫位置
cvp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
int width = cvp.getWidth()/btnCount;
int currentPos = cvp.getCurrentItem();
int startX;
if(currentPos> position)
startX = (currentPos-1) * width - (cvp.getWidth()-positionOffsetPixels)/btnCount;
else
startX = (currentPos-1) * width + positionOffsetPixels/btnCount;
SliderBar dsb = new SliderBar(getBaseContext(),startX,width);
ll.removeAllViews();
ll.addView(dsb,lp);
ll.invalidate(); // these didnt fix
mainLayout.invalidate();// these didnt fix
}
@Override
public void onPageSelected(int position) {}
@Override
public void onPageScrollStateChanged(int state) {}
});
My LinearLayout
android:layout_width="match_parent" android:orientation="vertical"
android:background="#77000000"
android:layout_height="0dp"
android:layout_weight="1" android:id="@+id/ll"
什麼是ll? mainLayout是什麼?爲什麼每次調用onPageScrolled時都要創建並添加SliderBar? – pskink 2015-02-10 10:32:29
因爲每次發生幻燈片幀,我正在更新滑動頁面幻燈片事件的視圖。此代碼在其他項目中不起作用。 mainLayout是主佈局,ll是我添加視圖的地方。它只在滾動事件空閒或結束時更新視圖 – 2015-02-10 10:45:18