Last active
December 12, 2015 07:48
-
-
Save maxhis/4739037 to your computer and use it in GitHub Desktop.
VerticalSeekBar for Android
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.Context; | |
import android.graphics.Canvas; | |
import android.util.AttributeSet; | |
import android.view.MotionEvent; | |
import android.widget.SeekBar; | |
public class VerticalSeekBar extends SeekBar { | |
private OnSeekBarChangeListener myListener; | |
public VerticalSeekBar(Context context) { | |
super(context); | |
} | |
public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) { | |
super(context, attrs, defStyle); | |
} | |
public VerticalSeekBar(Context context, AttributeSet attrs) { | |
super(context, attrs); | |
} | |
protected void onSizeChanged(int w, int h, int oldw, int oldh) { | |
super.onSizeChanged(h, w, oldh, oldw); | |
} | |
@Override | |
public void setOnSeekBarChangeListener(OnSeekBarChangeListener mListener) { | |
this.myListener = mListener; | |
} | |
@Override | |
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { | |
super.onMeasure(heightMeasureSpec, widthMeasureSpec); | |
setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth()); | |
} | |
protected void onDraw(Canvas c) { | |
c.rotate(-90); | |
c.translate(-getHeight(), 0); | |
super.onDraw(c); | |
} | |
@Override | |
public boolean onTouchEvent(MotionEvent event) { | |
if (!isEnabled()) { | |
return false; | |
} | |
switch (event.getAction()) { | |
case MotionEvent.ACTION_DOWN: | |
if (myListener != null) | |
myListener.onStartTrackingTouch(this); | |
break; | |
case MotionEvent.ACTION_MOVE: | |
setProgress(getMax() - (int) (getMax() * event.getY() / getHeight())); | |
onSizeChanged(getWidth(), getHeight(), 0, 0); | |
myListener.onProgressChanged(this, getMax() | |
- (int) (getMax() * event.getY() / getHeight()), true); | |
break; | |
case MotionEvent.ACTION_UP: | |
myListener.onStopTrackingTouch(this); | |
break; | |
case MotionEvent.ACTION_CANCEL: | |
break; | |
} | |
return true; | |
} | |
@Override | |
public synchronized void setProgress(int progress) { | |
super.setProgress(progress); | |
onSizeChanged(getWidth(), getHeight(), 0, 0); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment