问题描述
- 如何给滚动视图设置成图像显示?
- 我使用水平滚动视图,并且在视图上动态的添加项目。如果项目的数量超过能在屏幕上能显示的数量,我想用如下图显示的,用箭头形式水平滚动来显示这些项目。怎么实现呢?
这是我使用的XML代码:<HorizontalScrollView android:layout_width=""wrap_content"" android:scrollbars=""none"" android:id=""@+id/app_category"" android:layout_below=""@+id/top_layout"" android:background=""@drawable/minitopbar"" android:layout_height=""30dp""> <LinearLayout android:orientation=""horizontal"" android:id=""@+id/app_category_scroll_layout"" android:layout_width=""wrap_content"" android:layout_height=""fill_parent""/></HorizontalScrollView>
解决方案
A.你应该创建自己的类,然后继承HorizontalScrollView
:
public class ExtendedHorizontalScrollView extends HorizontalScrollView {private IScrollStateListener scrollStateListener;public HorizontalScrollViewForMenu(Context context AttributeSet attrs int defStyle) { super(context attrs defStyle);}public HorizontalScrollViewForMenu(Context context AttributeSet attrs) { super(context attrs);}public HorizontalScrollViewForMenu(Context context) { super(context);}@Overrideprotected void onLayout(boolean changed int l int t int r int b) { super.onLayout(changed l t r b); prepare();}private void prepare() { if (scrollStateListener != null) { View content = this.getChildAt(0); if (content.getLeft() >= 0) scrollStateListener.onScrollMostLeft(); if (content.getLeft() < 0) scrollStateListener.onScrollFromMostLeft(); if (content.getRight() <= getWidth()) scrollStateListener.onScrollMostRight(); if (content.getLeft() > getWidth()) scrollStateListener.onScrollFromMostRight(); }}@Overrideprotected void onScrollChanged(int l int t int oldl int oldt) { super.onScrollChanged(l t oldl oldt); if (scrollStateListener != null) { if (l == 0) scrollStateListener.onScrollMostLeft(); else if (oldl == 0) scrollStateListener.onScrollFromMostLeft(); int mostRightL = this.getChildAt(0).getWidth() - getWidth(); if (l >= mostRightL) scrollStateListener.onScrollMostRight(); if (oldl >= mostRightL && l < mostRightL) scrollStateListener.onScrollFromMostRight(); }}public void setScrollStateListener(IScrollStateListener listener) { scrollStateListener = listener;}public interface IScrollStateListener { void onScrollMostLeft(); void onScrollFromMostLeft(); void onScrollMostRight(); void onScrollFromMostRight();}}
B.使用它来定义布局
<LinearLayout .....> <ImageView android:id=""@+id/navigation_left"" ..... /> <your.custom.view.package.ExtendedHorizontalScrollView android:id=""@+id/scroller"" android:layout_width=""0px"" android:layout_weight=""1"" android:fadingEdge=""none"" ....> <LinearLayout android:orientation=""horizontal"" android:layout_width=""match_parent"" android:layout_height=""match_parent"" /> </your.custom.view.package.ExtendedHorizontalScrollView> <ImageView android:id=""@+id/navigation_right"" ..... /></LinearLayout>
C.当不能水平滚动的时候,给箭头添加以下逻辑:
((ExtendedHorizontalScrollView)findViewById(R.id.scroller)).setScrollStateListener(new IScrollStateListener() { public void onScrollMostRight() { ((View) scroller.getParent()).findViewById(R.id.navigation_right).setVisibility(View.INVISIBLE); } public void onScrollMostLeft() { ((View) scroller.getParent()).findViewById(R.id.navigation_left).setVisibility(View.INVISIBLE); } public void onScrollFromMostLeft() { ((View) scroller.getParent()).findViewById(R.id.navigation_left).setVisibility(View.VISIBLE); } public void onScrollFromMostRight() { ((View) scroller.getParent()).findViewById(R.id.navigation_right).setVisibility(View.VISIBLE); } });
解决方案二:
一个简单的方法是让scrollview没有边缘然后在scrollview上面或下面添加带箭头的图像。
<FrameLayout android:layout_width=""fill_parent"" android:layout_height=""fill_parent""> <ListView android:layout_width=""fill_parent"" android:layout_height=""fill_parent"" android:layout_alignParentTop=""true"" android:fadingEdge=""none"" /> <RelativeLayout android:layout_width=""fill_parent"" android:layout_height=""fill_parent""> <View android:layout_height=""6dp"" android:layout_width=""fill_parent"" android:layout_alignParentBottom=""true"" android:background=""@drawable/background_effect""/> </RelativeLayout> </FrameLayout>
时间: 2024-09-17 04:54:04