以前项目里面做过一个垂直的滚动条,拿过来改了改,做了一个垂直的滚动条,不多说,贴代码。

package com.my.example;

import com.my.example.R

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.drawable.Drawable;

import android.util.AttributeSet;

import android.util.Log;

import android.view.MotionEvent;

import android.view.View;

public class VerticalSeekBar extends View {

private final static String TAG = "VerticalSeekBar";

// 要画的图片

private Drawable mBackGroud;

private Drawable mThumb;

// 背景

private int m_nBackGroudWidth;

private int m_nBackGroudHeight;

// 滑块

private int m_nThumbHeight;

private int m_nThumbWidth;

// 滚动条高度,当滑块在最低端时,这时进度应该是0,所以滚动条高度应该是背景高度减去滑块高度

private int m_nSeekBarHeight;

private int m_nThumbLeft; // 滑块里父元素左边的距

private int m_nThumbTop; // 滑块离顶部距

private int m_nProgress; // 当前的进度

private int m_nMax=100; //最大值,一般从0开始

private OnVerticalSeekBarChangeListener mListener;

public interface OnVerticalSeekBarChangeListener{

void onProgressChanged(VerticalSeekBar verticalSeekBar, int progress);

}

public VerticalSeekBar(Context context, AttributeSet attrs) {

super(context, attrs);

mBackGroud = context.getResources().getDrawable(R.drawable.poker_seekbar_bg);

int intrinsicHeight = mBackGroud.getIntrinsicHeight();

int intrinsicWidth = mBackGroud.getIntrinsicWidth();

mThumb = context.getResources().getDrawable(R.drawable.poker_seekbar_bg);

// 物理像素,屏幕上显示的宽度和高度

m_nBackGroudWidth = (int) getResources().getDimension(R.dimen.vertical_seekbar_bg_width);

m_nBackGroudHeight = (int) getResources().getDimension(R.dimen.vertical_seekbar_bg_height);

m_nThumbWidth = (int) getResources().getDimension(R.dimen.vertical_seekbar_thumb_width);         m_nThumbHeight = (int) getResources().getDimension(R.dimen.vertical_seekbar_thumb_height);         Log.i(TAG, "m_nThumbWidth=" + m_nThumbWidth + ",m_nThumbHeight=" + m_nThumbHeight);         m_nSeekBarHeight = m_nBackGroudHeight - m_nThumbHeight;         m_nThumbLeft = (m_nBackGroudWidth - m_nThumbWidth) / 2;         // 第一,二个参数是相对于父元素坐标,三四个是宽度和高度         mBackGroud.setBounds(0, 0, m_nBackGroudWidth, m_nBackGroudHeight);     }     @Override     protected void onDraw(Canvas canvas) {         // getLeft相对于父元素左边距离,getRight=getLeft+getWidth         int width = getWidth();         Log.i(TAG, "width=" + width);         mBackGroud.draw(canvas);         mThumb.draw(canvas);     }     @Override     public boolean onTouchEvent(MotionEvent event) {         int Y = (int) event.getY();         int progress = 0;         // 这是滑块已经到达顶部         if (Y <= m_nThumbHeight / 2) {             progress = m_nMax;         }         // 滑块到达最底端         else if (Y >= (m_nSeekBarHeight + m_nThumbHeight / 2)) {             progress = 0;         } else {             progress = (m_nSeekBarHeight - Y + m_nThumbHeight / 2) * m_nMax / m_nSeekBarHeight;         }         refresh(progress);         return true;     }     private void refresh(int progress) {             m_nThumbTop = (m_nMax-progress )* m_nSeekBarHeight / m_nMax; // 把m_nSeekBarHeight分成m_nMax份,progress是当前的份额         mThumb.setBounds(m_nThumbLeft, m_nThumbTop, m_nThumbLeft + m_nThumbWidth, m_nThumbTop                 + m_nThumbHeight);         invalidate();                  if(mListener!=null){                          mListener.onProgressChanged(this, progress);         }     }     public void setListener(OnVerticalSeekBarChangeListener a_Listen) {         mListener = a_Listen;     }         public void setMax(int max) {                 this.m_nMax=max;         refresh(0);     } }

Android自定义ScrollBar,android自定义View之垂直的滚动条相关推荐

  1. Android自定义ScrollBar,Android必知必会-自定义Scrollbar样式

    如果移动端访问不佳,请使用–>GitHub版 背景 设计师给的设计图完全依照 IOS 的标准来的,导致很多细节的控件都得自己重写,最近的设计图中有显示滚动条,Android 默认的滚动条样式(带 ...

  2. Android开发之如何自定义垂直方向的SeekBar

    SeekBar进度条在项目开发过程中使用的太频繁了,比如媒体播放器当前播放的时间进度等.那么今天将对seekbar的使用做一个总结,后面写工作要用到直接过来copy就好.这边seekbar的使用分为横 ...

  3. Android必知必会-自定义Scrollbar样式

    如果移动端访问不佳,请使用–>GitHub版 背景 设计师给的设计图完全依照 IOS 的标准来的,导致很多细节的控件都得自己重写,最近的设计图中有显示滚动条,Android 默认的滚动条样式(带 ...

  4. android 气泡.9,Android 三种方式实现三角形气泡效果、自定义View、shape、点9图

    背景 这期需求中,项目需要这样一个情况,就是二级菜单上面有个三角形 乍一看,用个图片就可以解决,一个线性布局.垂直摆下去,所以一开始我是这样尝试的,后来发现美工给我切的图很不合适,不同手机显示效果也不 ...

  5. android字体ratingbar,Android 自定义View之自定义评分选择器RatingBar

    DtRatingBar 一个使用在android上的RatingBar.GitHub地址:DtRatingBar 使用依赖: implementation 'com.yetland.dtratingb ...

  6. android炫酷的自定义view,Android自定义View实现炫酷进度条

    本文实例为大家分享了Android实现炫酷进度条的具体代码,供大家参考,具体内容如下 下面我们来实现如下效果: 第一步:创建attrs文件夹,自定义属性: 第二步:自定义View: /** * Cre ...

  7. android组件什么时候加载到r文件,Android自定义加载loading view动画组件

    我写写使用步骤 自定义view(CircleProgress )的代码 package com.hysmarthotel.view; import com.hysmarthotel.roomcontr ...

  8. android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu[转]

    http://blog.csdn.net/jj120522/article/details/8095852 示意图就不展示了,和上一节的一样,滑动菜单SlidingMenu效果如何大家都比较熟悉,在这 ...

  9. android sqlite自定义函数,Android中自定义一个View的方法详解

    本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到 ...

最新文章

  1. Mac上webstorm与git仓库建立连接
  2. linux查看文件只会用vi?除了vi,这几个文件查看的命令,让你爱不释手!
  3. jenkins 文件服务器,jenkins 部署文档
  4. QQ登陆功能的实现2
  5. 科研生活:避免碌碌无为的感觉
  6. 美国能限制linux内核,美国大学教授「故意」向 Linux 提交含 Bug 代码,内核管理员“封杀”明尼苏达大学...
  7. 程序员面试宝典 第五版
  8. 移动通信原理B-------例题解答1
  9. PS抠发丝简单详细方法
  10. 腾讯加固纯手工简易脱壳教程
  11. CTF—古典密码(凯撒密码、维吉尼亚密码、培根密码等)
  12. 【模型5.0】幸福sharp模型:让优势带动劣势
  13. 【Unity编辑器扩展】Unity发布资源到商店流程Unity Asset Store Publish
  14. thinkpade450装内存条_thinkpad e450可以加内存条吗
  15. 软件工程实验微信小程序
  16. allwinner gsensor 校准调试
  17. c语言要使用数学函数,c语言中用到的 数学函数(转)
  18. MFC(CFile)文件操作
  19. Windows PowerShell简介
  20. 51单片机的频率计设计

热门文章

  1. mysql免安装版的下载与安装
  2. 如何:让Oracle表及字段显示为区分大小写
  3. AIX ORACLE 迁移到ASM
  4. F#基础教程 unit类型
  5. 银联接口的一些加密方式
  6. 对学习linux一周的总结
  7. [Spark][Python]对HDFS 上的文件,采用绝对路径,来读取获得 RDD
  8. 虚拟机,win server 2008,路由交换,实验报告
  9. 翻译成汉语的英文版书籍,为什么会薄很的原因
  10. js中的数组和字符串的一些方法