package com.zshq.sb;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.SeekBar;
public class MySeekBar extends SeekBar {
private Drawable mThumb;
public interface OnSeekBarChangeListener {
void onProgressChanged(MySeekBar VerticalSeekBar, int progress, boolean fromUser);
void onStartTrackingTouch(MySeekBar VerticalSeekBar);
void onStopTrackingTouch(MySeekBar VerticalSeekBar);
}
private OnSeekBarChangeListener mOnSeekBarChangeListener;
public MySeekBar(Context context) {
this(context, null);
}
public MySeekBar(Context context, AttributeSet attrs) {
this(context, attrs, android.R.attr.seekBarStyle);
}
public MySeekBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setOnSeekBarChangeListener(OnSeekBarChangeListener l) {
mOnSeekBarChangeListener = l;
}
void onStartTrackingTouch() {
if (mOnSeekBarChangeListener != null) {
mOnSeekBarChangeListener.onStartTrackingTouch(this);
}
}
void onStopTrackingTouch() {
if (mOnSeekBarChangeListener != null) {
mOnSeekBarChangeListener.onStopTrackingTouch(this);
}
}
void onProgressRefresh(float scale, boolean fromUser) {
Drawable thumb = mThumb;
if (thumb != null) {
setThumbPos(getHeight(), thumb, scale, Integer.MIN_VALUE);
invalidate();
}
if (mOnSeekBarChangeListener != null) {
mOnSeekBarChangeListener.onProgressChanged(this, getProgress(), fromUser);
}
}
private void setThumbPos(int w, Drawable thumb, float scale, int gap) {
int available = w + getPaddingLeft() - getPaddingRight();
int thumbWidth = thumb.getIntrinsicWidth();
int thumbHeight = thumb.getIntrinsicHeight();
available -= thumbWidth;
// The extra space for the thumb to move on the track
available += getThumbOffset() * 2;
int thumbPos = (int) (scale * available);
int topBound, bottomBound;
if (gap == Integer.MIN_VALUE) {
Rect oldBounds = thumb.getBounds();
topBound = oldBounds.top;
bottomBound = oldBounds.bottom;
} else {
topBound = gap;
bottomBound = gap + thumbHeight;
}
thumb.setBounds(thumbPos, topBound, thumbPos + thumbWidth, bottomBound);
}
@Override
protected void onDraw(Canvas c) {
c.rotate(-90);
c.translate(-getHeight(), 0);
super.onDraw(c);
}
@Override
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(heightMeasureSpec, widthMeasureSpec);
setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
}
@Override
public void setThumb(Drawable thumb) {
mThumb = thumb;
super.setThumb(thumb);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(h, w, oldw, oldh);
}
int y ;
@Override
public boolean onTouchEvent(MotionEvent event) {
y = (int) event.getY();
if (!isEnabled()) {
return false;
}
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// setPressed(true);
// onStartTrackingTouch();
// trackTouchEvent(event);
// onSizeChanged(getWidth(), getHeight(), 0, 0);
break;
case MotionEvent.ACTION_MOVE:
trackTouchEvent(event);
attemptClaimDrag();
onSizeChanged(getWidth(), getHeight(), 0, 0);
break;
case MotionEvent.ACTION_UP:
// trackTouchEvent(event);
// onStopTrackingTouch();
// setPressed(false);
// onSizeChanged(getWidth(), getHeight(), 0, 0);
break;
case MotionEvent.ACTION_CANCEL:
// onStopTrackingTouch();
// setPressed(false);
// onSizeChanged(getWidth(), getHeight(), 0, 0);
break;
}
return true;
}
public int getY1() {
return y;
}
public void setY1(int y) {
this.y = y;
}
private void trackTouchEvent(MotionEvent event) {
final int Height = getHeight();
final int available = Height - getPaddingBottom() - getPaddingTop();
int Y = (int) event.getY();
float scale;
float progress = 0;
if (Y > Height - getPaddingBottom()) {
scale = 0.0f;
} else if (Y < getPaddingTop()) {
scale = 1.0f;
} else {
scale = (float) (Height - getPaddingBottom() - Y) / (float) available;
}
final int max = getMax();
progress = scale * max;
setProgress((int) progress);
}
private void attemptClaimDrag() {
if (getParent() != null) {
getParent().requestDisallowInterceptTouchEvent(true);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
可以拖动的垂直的SeekBar
共67个文件
png:32个
class:12个
xml:10个
3星 · 超过75%的资源 需积分: 9 9 下载量 138 浏览量
2012-12-05
18:00:58
上传
评论
收藏 439KB ZIP 举报
温馨提示
一个垂直的SeekBar可以拖动 并且实现渐变 初学 代码不规范 请多包涵
资源推荐
资源详情
资源评论
收起资源包目录
SeekBar.zip (67个子文件)
SeekBar
bin
classes.dex 12KB
res
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
xixian2.png 280B
tou2.png 3KB
ic_launcher.png 4KB
di.png 10KB
volumecontrol.png 2KB
volumecontrolover.png 2KB
temperature_thermometer.png 20KB
xixian.png 275B
tou.png 2KB
temperature_high_light.png 1KB
temperature_unit.png 387B
blue_striped_bg.png 705B
di2.png 12KB
wendu.png 24KB
drawable-mdpi
ic_launcher.png 2KB
jarlist.cache 119B
classes
com
zshq
sb
BuildConfig.class 331B
SeekBarActivity.class 3KB
R$layout.class 373B
R$id.class 555B
R$drawable.class 1KB
SeekBarActivity$1.class 4KB
R$attr.class 319B
R.class 523B
R$string.class 406B
MySeekBar.class 5KB
MySeekBar$OnSeekBarChangeListener.class 368B
R$style.class 465B
resources.ap_ 119KB
com.zshq.sb.SeekBarActivity.apk 127KB
AndroidManifest.xml 798B
res
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
secondaryprogress.xml 246B
item.xml 241B
xixian2.png 325B
tou2.png 3KB
ic_launcher.png 4KB
thumb.xml 335B
di.png 10KB
volumecontrol.png 4KB
volumecontrolover.png 4KB
temperature_thermometer.png 26KB
w.jpg 25KB
xixian.png 286B
tou.png 2KB
temperature_high_light.png 4KB
progress.xml 243B
temperature_unit.png 3KB
blue_striped_bg.png 4KB
di2.png 12KB
wendu.png 39KB
vertical_progress_bar.xml 1KB
drawable-xhdpi
values
strings.xml 180B
styles.xml 984B
drawable-mdpi
ic_launcher.png 3KB
layout
main.xml 3KB
assets
gen
com
zshq
sb
BuildConfig.java 153B
R.java 2KB
proguard.cfg 1KB
src
com
zshq
sb
SeekBarActivity.java 4KB
MySeekBar.java 5KB
.project 843B
.classpath 364B
project.properties 360B
AndroidManifest.xml 798B
共 67 条
- 1
资源评论
- 霸霸882014-06-17根本实现不了。
废柴查
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功