自定义导航栏android
问题描述:
我想做一个自定义的水平导航栏,其中包含尽可能多的点,因为我有页面。自定义导航栏android
我的想法是:
- 创建自定义的ListView
- 创建类,从点延伸查看
- 所有这些点添加到动态自定义列表视图..
这是正确的这样做?
编辑:
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等。
我同意这一点! – 2012-02-05 10:54:00
好吧,我现在将它们全部添加到for循环中,使用this.addView(new NavigationCircle(context)); 所以onDraw没有被使用,这效果很好。 但我怎么能告诉我的自定义ListView,这些点中的哪一个在此刻处于活动状态,因为这个特殊的点必须用另一个可绘制的资源绘制。 因为我的构造函数可以被调用一次...我编辑上面的示例代码到我的初始问题。 – krackmoe 2012-02-05 11:46:04
绘制点时,请检查包含当前“活动”或“重要”点的id的某个var(例如,一个活动实例int变量),并以不同的方式绘制它。此外,添加一个点击侦听器(显然你可以添加一个点击侦听器到任何视图,ImageView也是如此)。您可以将不同的点击监听器添加到不同的点,甚至可以随时禁用一些监听器。此外,您可以使用HorizontalScrollView而不是LinearLayout或ListView,它适合您的目的。祝你好运。 – Yar 2012-02-06 07:12:41