package com.material.widget;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.support.annotation.NonNull;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by IntelliJ IDEA.
* User: keith.
* Date: 14-10-13.
* Time: 14:30.
*/
public class TrackSlider extends View {
private static final String TAG = TrackSlider.class.getSimpleName();
private static final int MAX = 100;
private Paint mPaint;
private int mColor;
private int mTintColor;
private int mThumbRadius;
private int mRippleRadius;
private int mBarHeight;
private int mMax = MAX;
private int mProgress = 0;
private RectF mUncoveredRectF = new RectF();
private RectF mCoveredRectF = new RectF();
public TrackSlider(Context context) {
this(context, null);
}
public TrackSlider(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public TrackSlider(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.TrackSlider);
mColor = attributes.getColor(R.styleable.TrackSlider_track_slider_color,
getResources().getColor(R.color.track_slider_color));
mTintColor = attributes.getColor(R.styleable.TrackSlider_track_slider_tint_color,
getResources().getColor(R.color.track_slider_tint_color));
mThumbRadius = attributes.getDimensionPixelSize(R.styleable.TrackSlider_track_slider_thumb_radius,
getResources().getDimensionPixelSize(R.dimen.track_slider_thumb_radius));
mRippleRadius = attributes.getDimensionPixelSize(R.styleable.TrackSlider_track_slider_ripple_radius,
getResources().getDimensionPixelSize(R.dimen.track_slider_ripple_radius));
mBarHeight = attributes.getDimensionPixelSize(R.styleable.TrackSlider_track_slider_bar_height,
getResources().getDimensionPixelSize(R.dimen.track_slider_bar_height));
mPaint = new Paint();
mPaint.setAntiAlias(true);
}
@Override
protected int getSuggestedMinimumWidth() {
return mRippleRadius * 4;
}
@Override
protected int getSuggestedMinimumHeight() {
return mRippleRadius * 2;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(measure(widthMeasureSpec, true), measure(heightMeasureSpec, false));
}
private int measure(int measureSpec, boolean isWidth) {
int result;
int mode = MeasureSpec.getMode(measureSpec);
int size = MeasureSpec.getSize(measureSpec);
int padding = isWidth ? getPaddingLeft() + getPaddingRight() : getPaddingTop() + getPaddingBottom();
if (mode == MeasureSpec.EXACTLY) {
result = size;
} else {
result = isWidth ? getSuggestedMinimumWidth() : getSuggestedMinimumHeight();
result += padding;
if (mode == MeasureSpec.AT_MOST) {
if (isWidth) {
result = Math.max(result, size);
} else {
result = Math.min(result, size);
}
}
}
return result;
}
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
@Override
protected synchronized void onDraw(@NonNull Canvas canvas) {
super.onDraw(canvas);
calculateBarDrawRect();
mPaint.setColor(mColor);
canvas.drawRect(mUncoveredRectF, mPaint);
mPaint.setColor(mTintColor);
canvas.drawRect(mCoveredRectF, mPaint);
}
private void calculateBarDrawRect() {
if (mProgress == 0) {
mUncoveredRectF.left = getPaddingLeft() + mRippleRadius + mThumbRadius;
mUncoveredRectF.right = getWidth() - getPaddingRight() - mRippleRadius;
mUncoveredRectF.top = getHeight() / 2.0f + -mBarHeight / 2.0f;
mUncoveredRectF.bottom = getHeight() / 2.0f + mBarHeight / 2.0f;
mCoveredRectF = new RectF();
}
}
}