自定义SeekBar实现标尺指示范围的功能(含自定义shape等资源)

要实现的功能请看图:

1.要实现这个功能就必须要禁止掉SeekBar的拖拽,所以在这里就选择集成自SeekBar,重写其onTouchEvent()方法,将返回值改为false表示处理拖拽事件,将事件往上传递。


import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.SeekBar;

/**
 * Created by Avater on 2017/3/14.
 * 自定义SeekBar,禁止用户拖动达到指示血压范围的效果
 */

public class MySeekBar extends SeekBar {
    public MySeekBar(Context context) {
        super(context);
    }

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

    public MySeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return false;
    }


2.在布局文件中使用:

<cn.appscomm.pedometer.avater.MySeekBar
    android:id="@+id/blood_limit"
    android:layout_width="match_parent"
    android:layout_height="20dp"
    android:progress="32"
    android:max="99"
  android:progressDrawable="@drawable/seek_list" android:thumb="@drawable/flag_green" />


3.编写seek_list资源文件,(android:thub->表示自定义的图标(自己选择合适的即可)),在drawable文件下->新建Drawable Resouces file ->layer-list(文件类型):seek_list

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@android:id/background"
        android:paddingBottom="3px"
        android:paddingTop="3px">
        <shape>
            <corners android:radius="10dip" />
            <gradient
                android:angle="270"
                android:centerColor="@android:color/transparent"
                android:centerY="0.45"
                android:endColor="@android:color/transparent"
                android:startColor="@android:color/transparent" />
        </shape>
    </item>

    <item
        android:id="@android:id/progress"
        android:paddingBottom="3px"
        android:paddingTop="3px">
        <clip>
            <shape>
                <corners android:radius="10dip" />
                <gradient
                    android:angle="270"
                    android:centerColor="@android:color/transparent"
                    android:centerY="0.45"
                    android:endColor="@android:color/transparent"
                    android:startColor="@android:color/transparent" />
            </shape>
        </clip>
    </item>
</layer-list>


4.在方法中调用:

/**
 * 以舒张压为标准
 *
 * @param progress 低压(progress<60),正常(60<progress<90),高压(大于90)
 * @deprecated 将MySeek的最大值设置为99,平均三等分,根据比例算出对应的进度值
 */
private void setSeekBarProgessAndPng(int progress) {
    int progr = 0;
    if (progress < 60) {
        progr = progress * (33 / 60);
        blood_limit.setThumb(getResources().getDrawable(R.drawable.flag_green));
    }
    if (progress >= 60 && progress < 90) {
        progr = 33 + (progress - 60) * (33 / 30);
        blood_limit.setThumb(getResources().getDrawable(R.drawable.flag_yellow));
    }
    if (progress >= 90) {
        progr = 66 + (33 / 10) * (progress - 90);
        blood_limit.setThumb(getResources().getDrawable(R.drawable.flag_red));
    }
    blood_limit.setProgress(progr);
}

完毕,谢谢支持!









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值