栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android 自定义SeekBar 实现分段显示不同背景颜色的示例代码

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android 自定义SeekBar 实现分段显示不同背景颜色的示例代码

在最近的开发工作中,要实现一个调色板的进度条,SeekBar要分成10段显示不同颜色,功夫不负有心人,终于实现了这个功能,下面分享给大家
示例图:

1.自定义SeekBar

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Build;
import android.util.AttributeSet;
import android.widget.SeekBar;


public class MulticolourSeekBar extends SeekBar {

 
 private Paint mMulticlourPaint;

 
 private int mMulticlourCount = 9;

 
 private int mMulticlourWidth = 2;

 
 private int mMulticlourColor = Color.WHITE;

 
 private boolean isShowTopOfThumb = false;

 public MulticolourSeekBar(Context context) {
 super(context);
 init();
 }

 public MulticolourSeekBar(Context context, AttributeSet attrs) {
 super(context, attrs);
 init();
 }

 public MulticolourSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
 super(context, attrs, defStyleAttr);
 init();
 }

 
 private void init() {
 //创建绘制刻度线的画笔
 mMulticlourPaint = new Paint();
 mMulticlourPaint.setColor(mMulticlourColor);
 mMulticlourPaint.setAntiAlias(true);

 //Api21及以上调用,去掉滑块后面的背景
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  setSplitTrack(false);
 }
 }

 
 @Override
 protected synchronized void onDraw(Canvas canvas) {
 super.onDraw(canvas);

 //极限条件校验
 if (getWidth() <= 0 || mMulticlourCount <= 0) {
  return;
 }

 //获取每一份的长度
// int length = (getWidth() - getPaddingLeft() - getPaddingRight() - mMulticlourCount * mMulticlourWidth) / (mMulticlourCount + 1);
 int length = (getWidth() - getPaddingLeft() - getPaddingRight()) / (mMulticlourCount + 1);
 //计算刻度线的顶部坐标和底部坐标
 int rulerTop = getHeight() / 2 - getMinimumHeight() / 2;
 int rulerBottom = rulerTop + getMinimumHeight();

 //获取滑块的位置信息
 Rect thumbRect = null;
 if (getThumb() != null) {
  thumbRect = getThumb().getBounds();
 }
 //绘制刻度线
// for (int i = 1; i <= mMulticlourCount; i++) {
//  //计算刻度线的左边坐标和右边坐标
//  int rulerLeft = i * length + getPaddingLeft();
//  int rulerRight = rulerLeft + mMulticlourWidth;
//
//  //判断是否需要绘制刻度线
//  if (!isShowTopOfThumb && thumbRect != null && rulerLeft - getPaddingLeft() > thumbRect.left && rulerRight - getPaddingLeft() < thumbRect.right) {
//  continue;
//  }
//
//  //进行绘制
//  canvas.drawRect(rulerLeft, rulerTop, rulerRight, rulerBottom, mMulticlourPaint);
// }
 for (int i = 0; i <= mMulticlourCount; i++) {
  int left = getPaddingLeft() + i * length;
  int right = left + length;
  if (i % 3 == 0) {
  mMulticlourPaint.setColor(Color.RED);
  } else if (i % 3 == 1) {
  mMulticlourPaint.setColor(Color.YELLOW);
  } else {
  mMulticlourPaint.setColor(Color.BLUE);
  }
  if (i == 0) {
  canvas.drawCircle(getPaddingLeft() + 10, 20, 10, mMulticlourPaint);
  left += 10;
  canvas.drawRect(left, 10, right, 30, mMulticlourPaint);
  } else if (i == mMulticlourCount) {
  right -= 10;
  canvas.drawRect(left, 10, right, 30, mMulticlourPaint);
  canvas.drawCircle(right, 20, 10, mMulticlourPaint);
  } else {
  canvas.drawRect(left, 10, right, 30, mMulticlourPaint);
  }
 }
 }

 
 public void setRulerCount(int mRulerCount) {
 this.mMulticlourCount = mRulerCount;
 requestLayout();
 }

 
 public void setRulerWidth(int mRulerWidth) {
 this.mMulticlourWidth = mRulerWidth;
 requestLayout();
 }

 
 public void setRulerColor(int mRulerColor) {
 this.mMulticlourColor = mRulerColor;
 if (mMulticlourPaint != null) {
  mMulticlourPaint.setColor(mRulerColor);
  requestLayout();
 }
 }

 
 public void setShowTopOfThumb(boolean isShowTopOfThumb) {
 this.isShowTopOfThumb = isShowTopOfThumb;
 requestLayout();
 }
}

2.activity_main.xml




 

3.shape_progress_drawable.xml



 
 
  
  
  
 
 

 
 
  
  
  
  
  
 
 

4.shape_thumb_icon.xml




 

 

总结

到此这篇关于Android 自定义SeekBar 实现分段显示不同背景颜色的文章就介绍到这了,更多相关Android 自定义SeekBar 背景颜色内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/154050.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号