Android 中的 seekBar会被开发者经常用到,用的最多的空拍是控制音量。但是有时后为了更好的UI效果,横着的拖动条不能满足我们项目的需要,我们可能需要竖直的或者圆形的拖动条,那这两种样式的类SeekBar的效果如何实现呢,接下来小编会一一给出效果和源码。接下来,先说一说圆形的效果吧,有图有真相,请看图:
看过图之后是不是觉得很炫,自己赞一个,下面给出源码:
/values/attr.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="HoloCircleSeekBar">
<attr name="wheel_size" format="integer" />
<attr name="pointer_size" format="integer" />
<attr name="max" format="integer"></attr>
<attr name="show_text" format="boolean"></attr>
<attr name="start_angle" format="integer"></attr>
<attr name="end_angle" format="integer"></attr>
<attr name="text_size" format="integer"></attr>
<attr name="init_position" format="integer"></attr>
<attr name="color" format="string"></attr>
<attr name="wheel_active_color" format="string"></attr>
<attr name="wheel_unactive_color" format="string"></attr>
<attr name="pointer_color" format="string"></attr>
<attr name="pointer_halo_color" format="string"></attr>
<attr name="text_color" format="string"></attr>
</declare-styleable>
</resources>
ZJBCircleSeekBar.java:
package com.example.circleseekbar;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.SweepGradient;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
* @author zjbpku
* @time 2013-08-21
* @blog http://blog.csdn.net/zjbpku
*/
public class ZJBCircleSeekBar extends View {
/**
* 保存状态
*/
private static final String STATE_PARENT = "parent";
private static final String STATE_ANGLE = "angle";
/***
* 事件监听
*/
private OnCircleSeekBarChangeListener mOnCircleSeekBarChangeListener;
/**
* 圆环paint对象
*/
private Paint mColorWheelPaint;
/**
* 游标paint对象
*/
private Paint mPointerHaloPaint;
/**
* 游标为图画时的paint对象
*/
private Paint mPointerColor;
/**
* 圆环的宽度
*/
private final int mColorWheelStrokeWidth = 10;
/**
* 游标所在圆环半径
*/
private final int mPointerRadius = 80;
/**
* The rectangle enclosing