Android

自定义UI

custom view

美工同学指定了一个进度条样式

这斑斓的进度条,如果要自己画实在是劳民伤财。于是请美工切了一张素材(样例)。

如果用shape或者.9图片不太好处理这个条纹。转变思路,放置2张图片。一张作为背景(底,bottom),一张作为进度条图片(cover)。 进度改变时,改变上面图片的宽度。

这就要求上面的图片是圆角的。自定义ImageView,调用 canvas.clipPath 来切割画布。

public class RoundCornerImageView extends android.support.v7.widget.AppCompatImageView {

private float mRadius = 18;

private Path mClipPath = new Path();

private RectF mRect = new RectF();

public RoundCornerImageView(Context context) {

super(context);

}

public RoundCornerImageView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public RoundCornerImageView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

public void setRadiusDp(float dp) {

mRadius = dp2px(dp, getResources());

postInvalidate();

}

public void setRadiusPx(int px) {

mRadius = px;

postInvalidate();

}

@Override

protected void onDraw(Canvas canvas) {

mRect.set(0, 0, this.getWidth(), this.getHeight());

mClipPath.reset(); // remember to reset path

mClipPath.addRoundRect(mRect, mRadius, mRadius, Path.Direction.CW);

canvas.clipPath(mClipPath);

super.onDraw(canvas);

}

private float dp2px(float value, Resources resources) {

return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, resources.getDisplayMetrics());

}

}

复制代码

每次绘制都切割一次圆角。记得调用 Path.reset() 方法。

回到我们要的进度条。布局文件中放置好层叠的图片。

android:id="@+id/progress_layout"

android:layout_width="190dp"

android:layout_height="10dp"

android:layout_centerInParent="true">

android:id="@+id/p_bot_iv"

android:layout_width="190dp"

android:layout_height="10dp"

android:src="@drawable/shape_round_corner_bottom" />

android:id="@+id/p_cover_iv"

android:layout_width="100dp"

android:layout_height="10dp"

android:scaleType="centerCrop"

android:src="@drawable/pic_cover_blue_white" />

复制代码

需要在代码中动态地改变cover的宽度;dialog中提供如下方法改变 LayoutParams

public void updatePercent(int percent) {

mPercent = percent;

mPercentTv.setText(String.format(Locale.CHINA, "%2d%%", mPercent));

float percentFloat = mPercent / 100.0f;

final int ivWidth = mBotIv.getWidth();

RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) mProgressIv.getLayoutParams();

int marginEnd = (int) ((1 - percentFloat) * ivWidth);

lp.width = ivWidth - marginEnd;

mProgressIv.setLayoutParams(lp);

mProgressIv.postInvalidate();

}

复制代码

显示出dialog并传入进度,就可以看到效果了。

这只是实现效果的一种方法,如果有更多的想法,欢迎和我交流~

android横向进度条宽度,Android - 条纹进度条实现,调整view宽度仿进度条相关推荐

  1. android 动态改变进度条,Android条纹进度条的实现(调整view宽度仿进度条)

    Android条纹进度条的实现(调整view宽度仿进度条) 发布时间:2020-10-03 16:14:24 来源:脚本之家 阅读:89 作者:RustFisher 前言 本文主要给大家介绍了关于An ...

  2. android 进度条图标方形_Android - 条纹进度条实现,调整view宽度仿进度条

    相关代码请参阅: https://github.com/RustFisher/aboutView/blob/master/app/src/main/java/com/rust/aboutview/ac ...

  3. android横向滑动控件,Android学习——HorizontalScollview水平滚动控件

    HorizatalScollView控件只是支持水平滚动,而且它只能包含一个控件,通常是在标签中定义一个 标签并且在标签中android:orientation属性值设置为horization.然后在 ...

  4. android横向自动滚动列表,android横向循环自动滚动

    项目需要实现GridView横向循环自动滚动 1.先看布局 android:layout_width="fill_parent" android:layout_height=&qu ...

  5. android横向多布局约束,Android约束布局中心水平对齐Textview和Imageview不工作

    参见英文答案 > Constraint Layout Vertical Align Center                                    6个 我希望我的textv ...

  6. android 横向滚轮控件,Android滚轮控件,基于ListView实现,可以自定义样式。

    Android滚轮控件,基于ListView实现,可以自定义样式. Features 支持自定义滚轮样式 支持common和holo两种皮肤 支持文本和图文混排两中数据模版 支持循环显示数据 支持选中 ...

  7. android横向列表控件,Android逆天控件:CircleListView(圆弧形列表)

    背景 近日设计师小姐姐创作能力爆棚,设计了一个狂拽酷炫的效果:星球环绕列表.如下图: image 在拿着板砖去沟通,且看到对方40米长的大刀后,愉快地确认出页面的如下特性: 需要实现一个可围绕圆弧(图 ...

  8. android横向滑动换页,[转载]Android 左右滑动切换页面或Activity的效果实现

    3.重载onFling函数 Java代码   publicbooleanonFling(MotionEvent e1, MotionEvent e2,floatvelocityX, floatvelo ...

  9. java中设置表格的宽度_java 画pdf用itext调整表格宽度、自定义各个列宽的方法

    ps:我用的版本是7.0.5 场景: 左侧第一列宽度不够,导致数据换行. Table table = new Table(new float[2]); new 一个Table之后,setWidthPe ...

最新文章

  1. 2018-3-23论文一种新的群智能算法--狼群算法(框架结构+感想一点点)
  2. opencv2函数学习之threshold:实现图像阈值化
  3. 【FI模块学习笔记】 固定资产概述(上)
  4. kafka压力测试说明
  5. 第1章-什么是深度学习(笔记)
  6. LINQ to SQL学习的几个问题
  7. 安装Oracle数据库操作步骤
  8. 小米鸿蒙1001小米鸿蒙,小米高管早就放下狠话!愿意使用鸿蒙2.0系统:那其他厂商呢?...
  9. 快速上手Google C++ 测试框架googletest
  10. 定义在计算机中怎么翻译,Profile在计算机中翻译成什么
  11. 甲骨文被曝服务器漏洞,攻击者窃获 22.6 万美元加密货币
  12. python 窗口键 键位码_滚轮键按一下 这些功能超方便
  13. CentOS6_mini_安装后基本配置
  14. linux c select函数返回值,linux c中select使用技巧
  15. Talib技术因子详解(十)
  16. 怎么复制豆丁网的文字
  17. 一种简单的不净观(女人)方法,帮助看破色欲
  18. win10 怎么把任务栏变透明
  19. Simulator installs an app drag-and-drop onto the Simulator window
  20. 单片机c语言编写从1到99程序,如何用用C语言编写的单片机来控制流水灯

热门文章

  1. leetcode-子数组
  2. 朋友圈购物遭遇维权“三难” 法官提醒潜在风险
  3. js判断字符串是否相等
  4. 第二十二章 核心与核心模块
  5. 一段顺序颠倒能读通的文字_打乱文字顺序,为啥我们照样读得懂
  6. java 接口 抽象类 继承 重载 重写 多态
  7. Docker 镜像安全
  8. garageband 淡出_如何在GarageBand中自动执行音量,平移和其他效果
  9. chromium加载网页
  10. Java工作五个月了_总结到ict5个月以来的工作