android 双向进度条,Android自定义双向进度条

这篇博客介绍了如何在Android中创建一个双向进度条,即可以选取播放范围的进度条。作者通过自定义View,详细讲解了绘制进度条涉及的样式、尺寸和操作监听,并提供了完整的代码实现。代码包括滑动条背景图、滑块图片、尺寸设置、手势监听等关键部分,实现滑动块的拖动和位置更新功能。
摘要由CSDN通过智能技术生成

想整个双向的进度条,就是可以选取播放范围的。

像这样:

0211b4c70959?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

20170905165905.png

然而官方控件里只有单向的。不要慌,我们自己画一个。

绘制一个进度条主要是三方面。1.样式,2.尺寸,3.操作监听。

完整代码来一遍:

注释基本上就把原理说明了一下。

package util;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.drawable.Drawable;

import android.support.v4.content.ContextCompat;

import android.util.AttributeSet;

import android.util.Log;

import android.view.MotionEvent;

import android.view.View;

import com.example.qzd.utildemo.R;

import java.math.BigDecimal;

/**

* 双向滑块的进度条(区域选择)

*/

public class SeekRangeBar extends View {

private Context _context;

private static final int CLICK_ON_LOW = 1; //手指在前滑块上滑动

private static final int CLICK_ON_HIGH = 2; //手指在后滑块上滑动

private static final int CLICK_IN_LOW_AREA = 3; //手指点击离前滑块近

private static final int CLICK_IN_HIGH_AREA = 4; //手指点击离后滑块近

private static final int CLICK_OUT_AREA = 5; //手指点击在view外

private static final int CLICK_INVAILD = 0;

private static final int[] STATE_NORMAL = {};

private static final int[] STATE_PRESSED =

{android.R.attr.state_pressed,android.R.attr.state_window_focused,};

private static int mThumbMarginTop = 0; //滑动块顶部离view顶部的距离

private static int mTextViewMarginTop = 0; //当前滑块文字距离view顶部距离

private Drawable hasScrollBarBg; //滑动条滑动后背景图

private Drawable notScrollBarBg; //滑动条未滑动背景图

private Drawable mThumbLow; //前滑块

private Drawable mThumbHigh; //后滑块

private int mScollBarWidth; //控件宽度 = 滑动条宽度 + 滑动块宽度

private int mScollBarHeight; //控件高度

private int mThumbWidth; //滑动块直径

private double mOffsetLow = 0; //前滑块中心坐标

private double mOffsetHigh = 0; //后滑块中心坐标

private int mDistance=0; //总刻度是固定距离 两边各去掉半个滑块距离

private int mFlag = CLICK_INVAILD; //手指按下的类型

private double defaultScreenLow = 0; //默认前滑块位置百分比

private double defaultScreenHigh = 100; //默认后滑块位置百分比

private OnSeekBarChangeListener mBarChangeListener;

private boolean editable=false;//是否处于可编辑状态

private int miniGap=5;//AB的最小间隔

private double progressLow;//起点(百分比)

private double progressHigh;//终点

public Seek

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值