自定义Seekbar具有两个drawables的屏蔽效果?

时间:2013-05-04 08:30:34

标签: android drawable seekbar custom-view

我正在使用自定义搜索栏来显示图表。我做到这一点。我通过将可绘制的背景应用于搜索栏来显示此图。现在我的问题是,我需要将蓝色设置为可绘制的进度,并需要将搜索条的背景设置为红色图形。因此,当进展发生时,拇指移动过红色,拇指通过的区域应该像掩蔽效果一样变为蓝色。任何人都可以告诉最好的方法来做到这一点。我的照片显示在Secondary progress Background

下方

4 个答案:

答案 0 :(得分:5)

在阅读完所有问题和答案之后,我希望这应该成为你完成任务的场景......

1.创建两个图表 按照你的逻辑。

2.从特定的位图生成两个drwable ......

Drawable G_bg = new BitmapDrawable(Red graph bitmap);
Drawable G_pg = new BitmapDrawable(Blue graph bitmap);

3.然后使用通过java代码创建的图层列表自定义搜索栏。

ClipDrawable c=new ClipDrawable(G_pg, Gravity.LEFT,ClipDrawable.HORIZONTAL);
LayerDrawable ld =new LayerDrawable (new Drawable[]{G_bg,c}); 

4.将此图层列表应用于您的搜索栏。

Graphbar.setProgressDrawable(ld);

这应该像你想要的那样....感谢

答案 1 :(得分:2)

这不是你想要的吗? SeekBarOverlay
my_seek_bar_progress.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@android:id/background"
        android:drawable="@drawable/red_graph"/>
    <item android:id="@android:id/progress">
        <clip android:drawable="@drawable/blue_graph" />
    </item>

</layer-list>  
片段或活动布局中的

<com.example.seekbaroverlay.MySeekBar
    android:id="@+id/mySeekBar1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:max="100" />

MySeekBar.java:

public class MySeekBar extends SeekBar {

    public MySeekBar(Context context) {
        this(context, null);
    }

    public MySeekBar(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MySeekBar(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setProgressDrawable(context.getResources().getDrawable(R.drawable.my_seek_bar_progress));
        setThumb(context.getResources().getDrawable(R.drawable.my_thumb));
    }
}

答案 2 :(得分:0)

您应该为SeekBar使用自定义progressDrawable。有关优秀的教程,请参阅this blog post

答案 3 :(得分:0)

你可以创建一个自定义视图。取消它的onTouch()方法来改变拇指的位置。也可以覆盖它的onDraw()方法并首先绘制红色图形作为视图的背景,然后从位置绘制蓝色图形这对应于拇指的位置。