2012-02-05 322 views
0

我想做一個自定義的水平導航欄,其中包含儘可能多的點,因爲我有頁面。自定義導航欄android

我的想法是:

  1. 創建自定義的ListView
  2. 創建類,從點延伸查看
  3. 所有這些點添加到動態自定義列表視圖..

這是正確的這樣做?

編輯:

public class NavigationBarLesson extends LinearLayout { 
    private LessonConfig config = LessonConfig.getInstance(); 
    private ArrayList<NavigationCircle> navigationCircles; 
    private int pageCount; 

    public NavigationBarLesson(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(context); 
    } 

    public NavigationBarLesson(Context context) { 
     super(context); 
     init(context); 
    } 

    private void init(Context context) { 
     Log.i("init","yes"); 
     pageCount = config.getLektionCount(); 
     navigationCircles = new ArrayList<NavigationCircle>(); 

     for(int i=0; i < pageCount; i++){ 
      this.addView(new NavigationCircle(context)); 
     } 

    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

     int width = View.MeasureSpec.getSize(widthMeasureSpec); 
     int height = View.MeasureSpec.getSize(heightMeasureSpec); 

     setMeasuredDimension(width, height); 
    } 

} 

public class NavigationCircle extends ImageView{ 
    private static Bitmap img; 
    private Bitmap activeImg; 


    public NavigationCircle(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(); 
    } 

    public NavigationCircle(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public NavigationCircle(Context context) { 
     super(context); 
     init(); 
    } 

    public void init() { 
     LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
     lp.setMargins(0, 0, 5, 0); 
     this.setLayoutParams(lp); 
     this.setBackgroundResource(R.drawable.upcoming_pages); 
    } 

    public Bitmap getImg() { 
     return img; 
    } 

    public Bitmap getActiveImg() { 
     return this.activeImg; 
    } 
} 

回答

1

好了,我不明白你爲什麼會需要一個ListView。使用一些簡單的視圖創建水平LinearLayout,如動態添加到LinearLayout的TextView或ImageView等。

+0

我同意這一點! – 2012-02-05 10:54:00

+0

好吧,我現在將它們全部添加到for循環中,使用this.addView(new NavigationCircle(context)); 所以onDraw沒有被使用,這效果很好。 但我怎麼能告訴我的自定義ListView,這些點中的哪一個在此刻處於活動狀態,因爲這個特殊的點必須用另一個可繪製的資源繪製。 因爲我的構造函數可以被調用一次...我編輯上面的示例代碼到我的初始問題。 – krackmoe 2012-02-05 11:46:04

+0

繪製點時,請檢查包含當前「活動」或「重要」點的id的某個var(例如,一個活動實例int變量),並以不同的方式繪製它。此外,添加一個點擊偵聽器(顯然你可以添加一個點擊偵聽器到任何視圖,ImageView也是如此)。您可以將不同的點擊監聽器添加到不同的點,甚至可以隨時禁用一些監聽器。此外,您可以使用Horizo​​ntalScrollView而不是LinearLayout或ListView,它適合您的目的。祝你好運。 – Yar 2012-02-06 07:12:41