0

我正在尝试在 Horizo​​ntallScrollView 上添加前景渐变。一切正常,但滚动渐变随着布局移动后。这是此问题的屏幕截图:应用程序启动后:http://img819.imageshack.us/img819/6622/horizo​​ntalscroll.jpg滚动 后:http: //img709.imageshack.us/img709/388/horizo​​ntalscroll2.jpg

xml中的主要布局:

<RelativeLayout 
android:id="@+id/RelativeLayout01" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@layout/backgroundgradient"
>

<include layout="@layout/header" />


<HorizontalScrollView android:id="@+id/ScrollView1"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:scrollbars="none"
                    android:foreground="@layout/scrollforegrad"
                    android:background="@layout/scrollbgrgrad"
                    android:layout_below="@id/LayoutHeader"
                    >

                    <LinearLayout
                        android:id="@+id/ThemeContainer"
                        android:orientation="horizontal"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        />
</HorizontalScrollView>

和渐变xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainForegroundGrad"

>
    <gradient 
        android:startColor="@color/scrollForegroundSide"
        android:centerColor="@color/scrollForegroundCenter"
        android:endColor="@color/scrollForegroundSide"
        android:angle="0"
     />
    <corners android:radius="0dp" />
</shape>

如果有人有这样的问题或知道如何解决,请分享:)提前谢谢。

4

1 回答 1

1

我认为您不能在 Horizo​​ntalScrollView 中使用前景。Foreground drawable 是从 FrameLayout 继承的功能滚动视图,似乎此功能支持未在滚动视图中实现。

然而,重写 Horizo​​ntalScrollView draw() 方法以在内容之上绘制可绘制对象非常容易。我什至可以从我的项目中为你提供一些代码片段来做这件事。

public void draw(Canvas aCanvas) {
    super.draw(aCanvas);

    getDrawingRect(mDrawingRect);

    Gravity.apply(Gravity.CENTER_VERTICAL|Gravity.LEFT, 
            mForegroundDrawable.getIntrinsicWidth(),
            mForegroundDrawable.getIntrinsicHeight(), 
            mDrawingRect, mForegroundDrawableBounds);

    mForegroundDrawableBounds.offset(ARROWS_MARGIN_SIDES, ARROWS_MARGIN_VERTICAL);

    mForegroundDrawable.setBounds(mForegroundDrawableBounds);
    mForegroundDrawable.draw(aCanvas);      
}
于 2011-02-03T15:07:13.620 回答