如何设置ScrollView的图像,而不是衰落的边缘?

我正在使用水平滚动视图,dynamic我将添加项目。 如果不。 的项目不仅仅是在屏幕上显示我想要在边缘显示图像(箭头)的项目(如滚动视图显示衰落边缘)。 我该怎么做。

只要看下面的图像,我想创build这样的。

这是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> 

在这里输入图像说明

Solutions Collecting From Web of "如何设置ScrollView的图像,而不是衰落的边缘?"

答:您必须创build自己的类,它扩展了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); } @Override protected 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(); } } @Override protected 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); } }); 

一个简单的select是使滚动视图没有淡化边缘,然后添加下面的箭头或滚动视图顶部的箭头的图像。

你的xml类似的东西:

  <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>