- 浏览: 485843 次
- 性别:
- 来自: 北京
-
最新评论
-
fatalfeel:
Irrlicht 3d Engine is full open ...
转:Android世界的15款开源的游戏开发引擎 -
diyangxia:
BigDecimal怎么初始化全局变量呢
android如何保留小数点后x位数字 -
c1230v:
这是一个程序员应该用的方法吗?求靠谱一点
转:android WebView 控件加载本地sdcard中html文件图片的问题 -
dingbuoyi:
楼主是天才 真牛逼
转:Progressbar-设置自己的样式 -
panxiaoming2008:
记住:显示本地文件时 必须使用APK'>file:/// ...
Android使用WebView加载本地资源
竖着的Seekbar:
import android.content.Context; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.widget.AbsSeekBar; public class VerticalSeekBar extends AbsSeekBar { private Drawable mThumb; private int height; private int width; public interface OnSeekBarChangeListener { void onProgressChanged(VerticalSeekBar VerticalSeekBar, int progress, boolean fromUser); void onStartTrackingTouch(VerticalSeekBar VerticalSeekBar); void onStopTrackingTouch(VerticalSeekBar VerticalSeekBar); } private OnSeekBarChangeListener mOnSeekBarChangeListener; public VerticalSeekBar(Context context) { this(context, null); } public VerticalSeekBar(Context context, AttributeSet attrs) { this(context, attrs, android.R.attr.seekBarStyle); } public VerticalSeekBar(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); } protected void onDraw(Canvas c) { c.rotate(-90); c.translate(-height,0); super.onDraw(c); } //可以改变进度条的高和宽 protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { width = 28; height = View.MeasureSpec.getSize(heightMeasureSpec); //width = View.MeasureSpec.getSize(widthMeasureSpec); this.setMeasuredDimension(width, height); } @Override public void setThumb(Drawable thumb) { mThumb = thumb; super.setThumb(thumb); } protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(h, w, oldw, oldh); } public boolean onTouchEvent(MotionEvent event) { if (!isEnabled()) { return false; } switch (event.getAction()) { case MotionEvent.ACTION_DOWN: setPressed(true); onStartTrackingTouch(); trackTouchEvent(event); break; case MotionEvent.ACTION_MOVE: trackTouchEvent(event); attemptClaimDrag(); break; case MotionEvent.ACTION_UP: trackTouchEvent(event); onStopTrackingTouch(); setPressed(false); break; case MotionEvent.ACTION_CANCEL: onStopTrackingTouch(); setPressed(false); break; } return true; } 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); } } public boolean dispatchKeyEvent(KeyEvent event) { if(event.getAction()==KeyEvent.ACTION_DOWN) { KeyEvent newEvent = null; switch(event.getKeyCode()) { case KeyEvent.KEYCODE_DPAD_UP: newEvent = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DPAD_RIGHT); break; case KeyEvent.KEYCODE_DPAD_DOWN: newEvent = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DPAD_LEFT); break; case KeyEvent.KEYCODE_DPAD_LEFT: newEvent = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DPAD_DOWN); break; case KeyEvent.KEYCODE_DPAD_RIGHT: newEvent = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DPAD_UP); break; default: newEvent = new KeyEvent(KeyEvent.ACTION_DOWN,event.getKeyCode()); break; } return newEvent.dispatch(this); } return false; } }
- VerticalSeekBar.rar (1.7 KB)
- 下载次数: 108
发表评论
-
service学习
2012-05-16 00:41 895http://www.cnblogs. ... -
InputStream,String,File相互转化
2012-05-14 23:32 12781. String --> InputStream ... -
转:实现类似手机QQ的可折叠固定标题列表
2012-04-12 19:05 1396http://douzifly.cnblog ... -
转:[Android]倒影效果的ImagView
2012-04-06 23:29 1395本文源自:http://blog.csdn.net/ke ... -
转:JDK中的URLConnection参数详解
2012-04-06 23:01 1187针对JDK中的URLConnection连 ... -
转:Game Engines for Android (Android游戏引擎)
2012-03-24 13:12 2729With Google IO fast approach ... -
做Android 系统/应用开发怎么可以不懂自动化测试
2012-03-22 15:02 1162http://blog.csdn.net/yiyaaixuex ... -
让Qt应用程序跑在Android上
2012-03-22 14:55 1372http://blog.c ... -
转:在android 2.3 AVD 模拟器上安装 google market 安卓市场
2012-03-22 14:29 1090http:// ... -
增加 addDataScheme("file") 才能收到SD卡插拔事件的原因分析 -- 浅析android事件过滤策略
2012-03-22 14:26 1976... -
转:andengine中的ParticleSystem
2012-01-18 11:08 1539看ParticleSystemSimpleExample,看得 ... -
test4:腾讯
2011-12-26 20:27 2www.qq.com -
test3:Yahoo
2011-12-26 20:25 2www.yahoo.com -
test2:google
2011-12-26 10:53 5www.google.com.hk -
test1:百度
2011-12-26 10:52 6www.baidu.com -
转:android 打包自己的自定义组件成JAR包
2011-12-24 11:54 1283http://www.cnblogs.c ... -
转:AndEngine中的字体加载及应用
2011-12-15 15:39 1560AndEngine中的字体加载及应用 An ... -
转:Android游戏框架AndEngine使用入门
2011-12-13 14:24 1589项目站点:http://www.andengine.org 项 ... -
转:notification更新数字的显示及AnimationDrawable的结合使用
2011-12-07 10:25 2629这是本人加入博客园的首篇博文,自己平常在工作学习过程遇 ... -
转:Android系统上(mv不可用)cp命令的替代方法
2011-11-30 18:32 9676Android系统上cp命令 ...
相关推荐
在布局XML文件中,我们可以像使用普通SeekBar那样使用这个自定义的VerticalSeekBar,只需将类名指定为我们刚才创建的`VerticalSeekBar`。 ```xml 垂直SeekBar android:id="@+id/vertical_seekbar" android:layout...
我们将深入讲解这个"Android竖着的SeekBar"实例,了解其背后的实现原理和代码结构。 首先,要创建竖直的SeekBar,我们需要自定义一个View类,并继承自SeekBar。在Android SDK中,SeekBar的滑块运动是沿着X轴进行的...
在XML布局文件中,你可以像添加其他任何控件一样添加VerticalSeekBar,只需将`android.widget.SeekBar`替换为`android.widget.VerticalSeekBar`。下面是一个基本示例: ```xml <android.widget.VerticalSeekBar ...
在本实例中,我们将探讨如何创建一个竖直方向的SeekBar,即“VerticalSeekbar”。 首先,我们要明白,Android SDK并未提供内置的垂直SeekBar。因此,我们需要自定义一个View来实现这一功能。在提供的...
1. 创建自定义View类:我们可以创建一个新的Java类,比如VerticalSeekBar,继承自SeekBar。在构造函数中,我们可以初始化一些基本属性,如滑动的最小值和最大值。 ```java public class VerticalSeekBar extends ...
标题“Android 竖着的SeekBar”指向的就是这样一个自定义实现,即在一个Android Studio项目中创建一个垂直滚动的SeekBar。 在Android Studio中开发自定义View通常涉及以下步骤: 1. 创建一个新的Java类,继承自...
然而,标准的SeekBar是水平排列的,而在这个实例中,我们将探讨如何实现一个竖直方向上的SeekBar,即“竖着的SeekBar”。 ### 一、垂直SeekBar的原理 Android SDK并没有提供内置的垂直SeekBar,但通过自定义View或...
本实例就是关于如何在Android中实现一个竖向的SeekBar。 首先,我们需要理解Android的SeekBar是如何工作的。它继承自ProgressBar,提供了一个可交互的进度条。默认情况下,用户可以通过水平滑动SeekBar来改变其表示...
【Android实例】Android竖向SeekBar详解 在Android开发中,SeekBar是一个常见的UI组件,通常用于显示进度条并允许用户通过拖动来改变进度。默认情况下,SeekBar是水平展示的,但在某些应用场景下,如垂直布局或者...
本实例将探讨如何在Android中创建一个竖向的SeekBar。 一、源码解析 在提供的"Android实例"中,我们可以通过查看源码来理解竖向SeekBar的实现方式。通常,这会涉及到自定义View的创建,覆盖onDraw()方法以绘制垂直...