1 package com.folioreader.view;
3 import android.content.Context;
4 import android.graphics.Canvas;
5 import android.support.v7.widget.AppCompatSeekBar;
6 import android.util.AttributeSet;
7 import android.view.MotionEvent;
10 * Created by priyank on 4/19/16.
13 public class VerticalSeekbar extends AppCompatSeekBar {
15 public VerticalSeekbar(Context context) {
19 public VerticalSeekbar(Context context, AttributeSet attrs, int defStyle) {
20 super(context, attrs, defStyle);
23 public VerticalSeekbar(Context context, AttributeSet attrs) {
24 super(context, attrs);
27 protected void onSizeChanged(int w, int h, int oldw, int oldh) {
28 super.onSizeChanged(h, w, oldh, oldw);
32 protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
33 super.onMeasure(heightMeasureSpec, widthMeasureSpec);
34 setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
37 protected void onDraw(Canvas c) {
39 c.translate(0, -getWidth());
44 private OnSeekBarChangeListener mOnChangeListener;
47 public void setOnSeekBarChangeListener(OnSeekBarChangeListener mOnChangeListener) {
48 this.mOnChangeListener = mOnChangeListener;
51 private int mLastProgress = 0;
54 public boolean onTouchEvent(MotionEvent event) {
59 switch (event.getAction()) {
60 case MotionEvent.ACTION_DOWN:
61 if (mOnChangeListener != null)
62 mOnChangeListener.onStartTrackingTouch(this);
66 case MotionEvent.ACTION_MOVE:
67 super.onTouchEvent(event);
68 int progress = getMax() - (int) (getMax() * event.getY() / getHeight());
70 // Ensure progress stays within boundaries
74 if (progress > getMax()) {
77 setProgress(progress); // Draw progress
78 if (progress != mLastProgress) {
79 // Only enact listener if the progress has actually changed
80 mLastProgress = progress;
81 if (mOnChangeListener != null)
82 mOnChangeListener.onProgressChanged(this, progress, true);
85 onSizeChanged(getWidth(), getHeight(), 0, 0);
89 case MotionEvent.ACTION_UP:
90 if (mOnChangeListener != null)
91 mOnChangeListener.onStopTrackingTouch(this);
95 case MotionEvent.ACTION_CANCEL:
96 super.onTouchEvent(event);
104 public synchronized void setProgressAndThumb(int progress) {
105 setProgress(progress);
106 onSizeChanged(getWidth(), getHeight(), 0, 0);
107 if (progress != mLastProgress) {
108 // Only enact listener if the progress has actually changed
109 mLastProgress = progress;
110 if (mOnChangeListener != null)
111 mOnChangeListener.onProgressChanged(this, progress, true);
115 public synchronized void setMaximum(int maximum) {
119 public synchronized int getMaximum() {