一个滑动评分控件

本文介绍了一个用于Android应用的滑动评分控件的实现,通过使用star_half.png和star_empty.png图片实现半星和空星效果。控件需要调用init()方法初始化,并可以在XML布局文件中简单使用。提供了若干可设置的参数,需在init()前设置,演示代码已给出。
摘要由CSDN通过智能技术生成

这次带来一个滑动打分的控件。在做评分功能的时候经常需要一个手指拖动来打分的控件。其实这种控件一百度挺多的,我很久以前也写了一个,这里翻出来跟大家分享一下。


控件命名为

SlideToGradeLayout,只有一个文件,复制粘贴即可用。下面上控件本体:


SlideToGradeLayout.java:


public class SlideToGradeLayout extends LinearLayout {
    private Context context;

    // 星星的宽度
    private float iconWidth = 20;

    // 星星的高度
    private float iconHeight = 20;

    // 星星间距
    private float iconPadding = 5;

    // 当前分数
    private float currentScore = 0;

    // 星星颗数
    private int iconCount = 5;

    // 是否锁定滑动,为true时只显示分数,滑动无反应
    private boolean isLock = false;

    // 是否已初始化
    private boolean isInit = false;

    // 是否只允许整数打星,为false时可打半星
    private boolean isIntegerOnly = false;

    // 是否允许打零星
    private boolean isZeroAvailable = true;

    private int fullIcon = R.drawable.star_full;
    private int halfIcon = R.drawable.star_half;
    private int emptyIcon = R.drawable.star_empty;

    private ArrayList<ImageView> list = new ArrayList<>();
    private int[] scoreMode;

    // 滑动时的回调
    private OnSlidingListener listener;

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

    public SlideToGradeLayout(Context context, AttributeSet attrs) {
        this(context, attrs, -1);
    }

    public SlideToGradeLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        this.context = context;
    }

    /**
     * 初始化方法
     * 在设置好需要的参数之后执行
     * 至少需要执行一遍此方法才有视图显示
     */
    public void init() {
        addIcon();
        initScoreMode();
        showScore(currentScore);
        isInit = true;
    }

    /**
     * 刷新显示的星数
     *
     * @param score 星数
     */
    public void refresh(float score) {
        currentScore = score;
        showScore(currentScore);
    }

    /**
     * 添加星星
     */
    private void addIcon() {
        list.clear();
        removeAllViews();
        setOrientation(LinearLayout.HORIZONTAL);
        for (int i = 0; i < iconCount; i++) {
            ImageView imageView = new ImageView(context);
            LayoutParams layoutParams = new LayoutParams(dp2px(iconWidth), dp2px(iconHeight));
            if (i == 0) {
                layoutParams.setMargins(dp2px(iconPadding), 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值