2015-02-10 112 views
0

我正在繪製一個滑動條,當頁面滑動發生在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" 
+0

什麼是ll? mainLayout是什麼?爲什麼每次調用onPageScrolled時都要創建並添加SliderBar? – pskink 2015-02-10 10:32:29

+0

因爲每次發生幻燈片幀,我正在更新滑動頁面幻燈片事件的視圖。此代碼在其他項目中不起作用。 mainLayout是主佈局,ll是我添加視圖的地方。它只在滾動事件空閒或結束時更新視圖 – 2015-02-10 10:45:18

回答

1

嘗試在你的意圖添加標誌FLAG_ACTIVITY_NO_ANIMATION。而活動做窗口動畫

Intent intent = new Intent(SourceActivity.this, TargetActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
startActivity(intent); 

Issue related commit on google source

0

View#invalidate()可能沒有效果。因此FLAG_ACTIVITY_NO_ANIMATION可能會解決您的問題。 在我的情況下,onDraw()方法在動畫幀更新過程中不會調用。

相關問題