自定义导航栏android

自定义导航栏android

问题描述:

我想做一个自定义的水平导航栏,其中包含尽可能多的点,因为我有页面。自定义导航栏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; 
    } 
} 

好了,我不明白你为什么会需要一个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