我有一个自定义的 view,放在一个 fragment 里面,fragment 则是在 ViewPager 里面。我在 view 里面定义了一个 setProgress 方法,设置属性 progress 的值并且重绘这个 view,我在 fragment 的 onCreateView 里面调用这个方法,但是当 app 启动的时候这个 SpeedometerView 和在 xml 布局里面预览的一样,没有发生改变,但是当我在 viewpager 里面切换 fragment 时这个自定义的 view 又能正常重绘并显示了。

我在 debug 时发现 setprogress 方法里的 invalidate 方法被调用并在 ondraw 里重绘了这个 view,但是之后 ondraw 方法又被调用了一次并且最后又显示预览时的默认的图形。

public class SpeedometerView extends View {

private float progress;

private Paint arcPaint;

private int arcBgColor;

private int arcFgColor;

private RectF oval;

private float padding;

public SpeedometerView(Context context) {

this(context,null);

}

public SpeedometerView(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

TypedArray typedArray=context.obtainStyledAttributes(attrs, R.styleable.SpeedometerView);

arcBgColor= typedArray.getColor(R.styleable.SpeedometerView_arcBgColor,Color.GRAY);

arcFgColor=typedArray.getColor(R.styleable.SpeedometerView_arcFgColor,Color.YELLOW);

padding=typedArray.getDimension(R.styleable.SpeedometerView_padding,5);

typedArray.recycle();

oval=new RectF();

arcPaint =new Paint();

arcPaint.setColor(arcBgColor);

arcPaint.setAntiAlias(true);

arcPaint.setStrokeWidth(10f);

arcPaint.setStyle(Paint.Style.STROKE);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

float baseDimen=getWidth()

float ovalLeft=getWidth()/2f-baseDimen/2+padding;

float ovalRight=getWidth()/2f+baseDimen/2-padding;

float ovalTop=getHeight()/2f-baseDimen/2+padding;

float ovalBottom=getHeight()/2f+baseDimen/2-padding;

oval.set(ovalLeft,ovalTop,ovalRight,ovalBottom);

canvas.drawArc(oval,135,270,false, arcPaint);

arcPaint.setColor(arcFgColor);

float angle=270*(progress/100);

Log.d("draw","ondraw");

canvas.drawArc(oval,135,angle,false, arcPaint);

}

public float getProgress() {

return progress;

}

public void setProgress(float progress) {

this.progress = progress;

invalidate();

}

}

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

View view=inflater.inflate(R.layout.fragment_health,container,false);

gasHealthSmv=view.findViewById(R.id.gas_health_smv);

envHealthSmv=view.findViewById(R.id.env_health_smv);

gasHealthSmv.setProgress(20);

return view;

}

android view强制重绘_安卓自定义 view 不能正常重绘相关推荐

  1. android控件向内弧度_安卓自定义 View 基础:坐标系、角度弧度、颜色

    安卓自定义View基础 - 坐标系 一.屏幕坐标系和数学坐标系的区别 由于移动设备一般定义屏幕左上角为坐标原点,向右为x轴增大方向,向下为y轴增大方向, 所以在手机屏幕上的坐标系与数学中常见的坐标系是 ...

  2. android 主题 设置统一背景_安卓自定义系统背景美化主题及修改教程

    想自己美化安卓系统界面是意见比较麻烦的事情,有些朋友会去网上找全局透明教程,但全局透明后滑动感觉延迟感很严重,所以我认为全局透明感觉并不可取,固定一张系统背景也可以达到美化的效果,并且不会像全局透明那 ...

  3. android自定义组合view,安卓自定义view之组合view

    效果图 image 实现方案 方案概述 通过在xml布局文件中组合控件,通过自定义view类加载xml文件,让外部通过xml属性或者方法来设置数据. 主要实现代码 组合view xml文件 xmlns ...

  4. 安卓自定义View实现加载gif图片

    开题:加载GIF的场景在安卓开发中还比较常见,网上也有一些三方法的框架会支持对gif的加载,在上篇博客为大家推荐的图片加载库Glide也支持gif的加载Glide工具类的简单封装,今天给大家分享通过自 ...

  5. 安卓自定义View——网易颜色渐变效果指示器

    一直想写博客来着,可惜直到现在才真正抽出时间.最近一直在研究网易新闻这个UI框架,发现了一些很值得借鉴的效果,当然,网上也不乏这方面的介绍.本文主要实现的指示器效果为字体颜色和大小渐变,废话不多说献上 ...

  6. 安卓自定义view全解:初始化,onDraw函数,onMeasure函数,用户手势事件

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓自定义view全解. view类包含如下函数.可供重写. onFinishInflate() 回调方法,当应用从XML加载该组件并用它构建界面之后 ...

  7. 安卓自定义view中 绘画基本图形点线面,矩形,方形,圆,扇形,文字及沿着特定方向布局,自定义圆角ImageView图片等等相关api使用方法及举例

    安卓自定义view中 绘画基本图形点线面,矩形,方形,圆,扇形,文字及沿着特定方向布局,自定义圆角ImageView图片等等相关api使用方法及举例,图片压缩处理逻辑 本文旨在介绍自定义View的实现 ...

  8. 安卓自定义View进阶-事件分发机制原理

    之前讲解了很多与View绘图相关的知识,你可以在 安卓自定义View教程目录 中查看到这些文章,如果你理解了这些文章,那么至少2D绘图部分不是难题了,大部分的需求都能满足,但是关于View还有很多知识 ...

  9. 安卓自定义View的状态保存与恢复

    安卓自定义View的状态保存与恢复 我们在开发某些安卓应用(如安卓小游戏)时,可能会用到自定义View,这时候往往需要保存自定义View的状态信息,以便在遇到某些情况(如由于系统内存资源紧张被系统杀死 ...

  10. Android绘制竖直虚线完美解决方案—自定义View

    Android绘制竖直虚线完美解决方案-自定义View 开发中我们经常会遇到绘制虚线的需求,一般我们使用一个drawable文件即可实现,下面我会先列举常规drawable文件的实现方式. 使用dra ...

最新文章

  1. (2)PyCharm开发Flash项目之蓝图构建
  2. 如何禁用UITableView选择?
  3. rust(47)-key-value哈希-HashMap,BTreeMap,HashSet,BTreeSet
  4. tsc - error TS2304 Cannot find name 'Set'/'Promise'
  5. 当前目标 1614868689
  6. java map 元素个数_Java 小模块之--统计字符串中元素个数
  7. 基于Spring Security的认证授权_连接数据库查询权限_Spring Security OAuth2.0认证授权---springcloud工作笔记131
  8. bind + DNSCrypt 实现安全加密转发,避免DNS污染
  9. IndexedDb、Web Sql、localStorage以及localForage使用
  10. DoIP专栏 - DoIP概述
  11. CISP 和 NISP差别一览
  12. php rabbitmq延迟队列实现
  13. 微博奥运营销策略复盘,探索双十一微博品牌营销新手法!!
  14. 【时间之外】几张图说清楚供应链金融赚钱方法
  15. 【许晓笛】别傻了,瀑布到来时,一句口号根本守不住你的币
  16. 揭秘小程序上线不到一周,每天2万销售额,究竟怎么做到的?
  17. AD6.9原理图打印去除背景色
  18. vxwork任务切换分析
  19. Vivado调试相关
  20. fffffffffffffffffffffffffffffffff

热门文章

  1. Java中使用各种方式实现网页跳转
  2. OpenCV_(Fit Line with points)用直线拟合一组点
  3. tf之static_transform_publisher
  4. 一位算法工程师从30+场秋招面试中总结出的超强面经——目标检测篇(含答案)...
  5. pcl学习之kd-tree
  6. 【Rollo的Python之路】Python 队列 学习笔记 queue
  7. marathon 测试
  8. web程序常见错误及解决方法
  9. Java单元测试-覆盖率分析报告自动生成
  10. 数据分析之Pandas(一) 学习资料汇总