当前位置:   article > 正文

垂直形式的ProgresBar,和两头圆角类型设置_vs programbar如何垂直

vs programbar如何垂直

这两天,项目中用到设置系统声音和样式展示,也不是很难,但是,在这里做个记录进行保存,以后,可能还用的上,大家都知道正常的Progressbar怎么使用,这里,我就不多说了,我先将项目中用的的垂直方向的音量柱做个记录,

1、首先我发先获取系统音量的最大值,和我想要设置的最大值不一样,这里,你们可以自己想办法,看看是为什么,我自己的解决方式是自己设定的一个最大值,通过,音量键加减进行更改音量,首先将垂直的progressbar写出来

  1. import android.content.Context;
  2. import android.graphics.Canvas;
  3. import android.os.Build;
  4. import android.util.AttributeSet;
  5. import android.util.Log;
  6. import android.view.MotionEvent;
  7. import android.widget.ProgressBar;
  8. import androidx.annotation.RequiresApi;
  9. public class VerticalProgressBar extends ProgressBar {
  10. private int currentProgress = 0;
  11. public VerticalProgressBar(Context context) {
  12. super(context);
  13. }
  14. public VerticalProgressBar(Context context, AttributeSet attrs) {
  15. super(context, attrs);
  16. }
  17. public VerticalProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
  18. super(context, attrs, defStyleAttr);
  19. }
  20. @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
  21. public VerticalProgressBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
  22. super(context, attrs, defStyleAttr, defStyleRes);
  23. }
  24. @Override
  25. protected void onSizeChanged(int w, int h, int oldw, int oldh) {
  26. super.onSizeChanged(h, w, oldh, oldw);
  27. }
  28. @Override
  29. protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  30. super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  31. }
  32. /*
  33. * 重点在这里
  34. */
  35. @Override
  36. protected synchronized void onDraw(Canvas canvas) {
  37. canvas.rotate(-90);
  38. canvas.translate(-getHeight(), 0);
  39. super.onDraw(canvas);
  40. }
  41. @Override
  42. public boolean onTouchEvent(MotionEvent event) {
  43. if (!isEnabled()) {
  44. return false;
  45. }
  46. switch (event.getAction()) {
  47. case MotionEvent.ACTION_DOWN:
  48. case MotionEvent.ACTION_MOVE:
  49. case MotionEvent.ACTION_UP:
  50. setProgress(getMax() - (int) (getMax() * event.getY() / getHeight()));
  51. currentProgress = getMax() - (int) (getMax() * event.getY() / getHeight());
  52. onSizeChanged(getWidth(), getHeight(), 0, 0);
  53. break;
  54. case MotionEvent.ACTION_CANCEL:
  55. break;
  56. }
  57. return true;
  58. }
  59. /**
  60. * 获取当前progress进度
  61. * @return
  62. */
  63. public int getCurrentProgress() {
  64. return currentProgress;
  65. }
  66. }

2、然后就再布局中引用了,当然,肯定想问,我想要好看的progressbar啊,是的,我也不想一步步来了,直接就上结果样子把

看到了把,是不是你想要的样子,是不是,就说是不是把,是的话,点赞,啊哈哈哈,我知道,你看到这里,肯定说,哇哈哈,终于找到自己想要的资源了,嗯,不错,就是这样的,那怎么实现呢 ,且听下回分解,哦不,请听我下面解说,嘿嘿,首先,写一个style,知道怎么写吗 ?不错,,就是再你的values下的style文件里面,添加如下代码

  1. <style name="ProgressBar_Scale" parent="@android:style/Widget.ProgressBar.Horizontal">
  2. <item
  3. name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
  4. <item name="android:progressDrawable">@drawable/seekbar_style</item>
  5. </style>

3、是不是发现,自己没有seekbar_style.xml文件,是的,上面里面的这个文件,就是要给progressbar设置样式的,所以呢,代码如下,就是了,再你的drawable文件夹下创建资源文件seekbar_style.xml,当然,名字,你自己随意,这是我自己定义的名字

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:id="@android:id/background">
  4. <shape>
  5. <corners android:radius="15dip" />
  6. <gradient
  7. android:angle="270"
  8. android:centerColor="#ff5a5d5a"
  9. android:centerY="0.75"
  10. android:endColor="#ff747674"
  11. android:startColor="#ff9d9e9d" />
  12. </shape>
  13. </item>
  14. <item android:id="@android:id/secondaryProgress">
  15. <scale android:scaleWidth="100%">
  16. <shape>
  17. <corners android:radius="15dip" />
  18. <gradient
  19. android:angle="270"
  20. android:centerColor="#80ffb600"
  21. android:centerY="0.75"
  22. android:endColor="#a0ffcb00"
  23. android:startColor="#80ffd300" />
  24. </shape>
  25. </scale>
  26. </item>
  27. <item android:id="@android:id/progress">
  28. <scale android:scaleWidth="100%">
  29. <shape>
  30. <corners android:radius="15dip" />
  31. <gradient
  32. android:angle="270"
  33. android:centerColor="#ff3399CC"
  34. android:centerY="0.75"
  35. android:endColor="#ff6699CC"
  36. android:startColor="#ff0099CC" />
  37. </shape>
  38. </scale>
  39. </item>
  40. </layer-list>

4、是不是很简单,里面几乎没有什么要改正的对吧,想要改,我就不备注了,你自己运行后看效果就行了,想改什么自己多试几次,这样,能加深你印象,下面就是再progressbar里面配置了把,是的,在你的activity布局文件中,配置你的pragressbar控件

  1. <com.example.vehicleconsole.wedgt.VerticalProgressBar
  2. android:id="@+id/seek"
  3. style="@style/ProgressBar_Scale"
  4. android:layout_width="25dp"
  5. android:layout_height="280dp"
  6. android:progressDrawable="@drawable/seekbar_style" />

5、这样,你的progressbar就是一个竖向的,而且是两头半圆角的一个控件了,是不是很开心,还需什么吗 ?嗯我想想,当然,在activity里面,肯定要先设置最大值,progressbar.setMax(20);具体,你想设置多少,你自己定啦;然后,设置想要设置的当前进度,就是想将progressbar设置到想要的位置 progressbar.setProgress(10);里面的值也是你自己定的,有人肯定问了,我想要滑动他怎么办 ?是啊,怎么办 ? 因为,控件里面我加了获取当前进度的地方,所以,下面代码,你在监听里面监听一下就好了

  1. progressbar.setOnTouchListener(new View.OnTouchListener() {
  2. @Override
  3. public boolean onTouch(View v, MotionEvent event) {
  4. int currentProgress = seek.getCurrentProgress();
  5. mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, currentProgress, AudioManager.FLAG_SHOW_UI);
  6. SpUtil.putInt("phoneMusic", currentProgress);
  7. currentMusic = currentProgress;
  8. return false;
  9. }
  10. });

6、看到没 ?这里的mAudioManager是系统manager,不知道的看下面,里面是当我滑动到哪里,就将系统声音设置到哪里,然后进行sp保存,具体怎么存,你们自己定哈,不用管我怎么存,我是方便下次记录,

   mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

7、具体逐步增加和减少系统音量的方法是下面样子

  1. //*****************************这是减音量的地方别拷贝错了*********************
  2. mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
  3. AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
  4. if (currentMusic - 1 >= MINMUSIC) {
  5. seek.setProgress(currentMusic - 1);
  6. SpUtil.putInt("phoneMusic", currentMusic - 1);
  7. currentMusic = currentMusic - 1;
  8. }
  9. //*****************************下面是增加音量的地方别拷贝错了*********************
  10. //*****************************下面是增加音量的地方别拷贝错了*********************
  11. //*****************************下面是增加音量的地方别拷贝错了*********************
  12. mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
  13. AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
  14. if (currentMusic + 1 <= MAXMUSIC) {
  15. seek.setProgress(currentMusic + 1);
  16. SpUtil.putInt("phoneMusic", currentMusic + 1);
  17. currentMusic = currentMusic + 1;
  18. }

8、里面的if判断,是我自己的逻辑哈,你们可以不用管,只需要拷贝if判断之外的就行了,那就已经可以做到增减声音了 ,我是把增减都放到了上面代码中,请大家分别拷贝,不要无脑拷贝,!~!~!具体的功能基本上都已经实现了,代码呢还是需要自己整理的,具体怎么弄,你们自己看着办喽,有朋友肯定想说,我想横向的怎么办,横向的你就自己定义一个类去继承Prggressbar,然后,将我最上面的那个里面onTouch的方法,重写一下,然后,其他都一样,也能实现哦,好了,基本都已经完毕了,有对你帮助的话,就请给个赞支持下我,主要是对笔者的一点小小的鼓励,也是我们共同进步的动力,谢谢!~!~!~

 

 

 

 

 

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/474173
推荐阅读
相关标签
  

闽ICP备14008679号