android关于自定义seekbar控件的问题(将横向seekbar改成竖向seekbar)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android关于自定义seekbar控件的问题(将横向seekbar改成竖向seekbar)相关的知识,希望对你有一定的参考价值。

自定义了个seekbar,将横向的seekbar改为了竖向的seekbar,目前只支持触摸,但是用遥控器控制时候按上下按钮没响应,按下左右按钮seekbar才会被拖动 追了下代码seekbar继承自AbsSeekbar,AbsSeekBar继承自progressBar,ProgressBar继承自View,我该如何实现将按下左右键seekbar的progress值发生改变改为按下上下键seekbar的progress值发生改变?以下是我写的自定义seekbar的代码:

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.widget.SeekBar;

public class VerticalSeekBarTwo extends SeekBar

public VerticalSeekBarTwo(Context context, AttributeSet attrs, int defStyle)
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub


public VerticalSeekBarTwo(Context context, AttributeSet attrs)
super(context, attrs);
// TODO Auto-generated constructor stub


public VerticalSeekBarTwo(Context context)
super(context);
// TODO Auto-generated constructor stub


protected void onSizeChanged(int w, int h, int oldw, int oldh)
super.onSizeChanged(h, w, oldh, oldw);


@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 synchronized void setProgress(int progress)
super.setProgress(progress);
onSizeChanged(getWidth(), getHeight(), 0, 0);


@Override
public boolean onTouchEvent(MotionEvent event)
if (!isEnabled())
return false;


switch (event.getAction())
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
setProgress(getMax()
- (int) (getMax() * event.getY() / getHeight()));
onSizeChanged(getWidth(), getHeight(), 0, 0);
break;

case MotionEvent.ACTION_CANCEL:
break;

return true;


@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
if (isEnabled())
int progress = getProgress();
switch (keyCode)
case KeyEvent.KEYCODE_DPAD_UP:
if (progress <= 0) break;
setProgress(progress - 1);
return true;
case KeyEvent.KEYCODE_DPAD_DOWN:
if (progress >= getMax()) break;
setProgress(progress + 1);
return true;
case KeyEvent.KEYCODE_DPAD_LEFT:
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
break;


return super.onKeyDown(keyCode, event);

参考技术A 是不是按键值出错了,你在onKeyDown里每次按键都打印出来按键值System.out.println("键值:"+keyCode);
然后看看按键值是不是跟你写的对应追问

谢谢你了,自己搞反了,已经解决了,话说现在这百度知道的效果不行啊,这问题上周发出去的。

追答

我没注意时间。。。

Android基础控件——SeekBar的使用仿淘宝滑动验证


 

学习,学习,学以致用

SeekBar是一个拖动条控件,最简单的案例就是我们的调节音量,还有音频视频的播放,传统的SeekBar样式,如图

技术分享图片

传统的实现太简单,不足以让我们到能装逼的地步。本来是打算实现滴滴出行滑动完成订单的效果,可惜找不到效果图,今天也就用淘宝的滑动验证来作为实例

技术分享图片

  • SeekBar:使用progressDrawable属性自定义SeekBar
  • 拖动块:使用thumb属性更改,其实就是一张图片
  • 文字:使用RelativeLayout嵌套在一起

其效果是

技术分享图片

  • android:max:设置进度条最大的进度值
  • android:progress:设置当前的进度值
  • android:progressDrawable:设置进度条的Drawable样式
  • android:thumb:设置进度条滑块
  • android:thumbOffset:设置进度条滑块的偏移量

这里是android:progressDrawable里面的seekbar_bg.xml

代码也非常简单,seekBar提供了一个监听事件OnSeekBarChangeListener,在对应的回调中实现文字的出现和消失、文本内容的修改

好了,今天的SeekBar的使用就到这里,如果对其他基础控件感兴趣的,可以关注我的博客,基础控件系列,欢迎提供大家idea

源码下载

以上是关于android关于自定义seekbar控件的问题(将横向seekbar改成竖向seekbar)的主要内容,如果未能解决你的问题,请参考以下文章

Android基础控件——SeekBar的使用仿淘宝滑动验证

Android自定义RatingBar(星级评分控件)

Android 进度条(ProgressBar)和拖动条(Seekbar)补充“自定义组件”(总结)

酷炫进度条 自定义SeekBar

Android 自定义 SeekBar

酷炫进度条 自定义SeekBar