• 自定义View
  • 主函数
  • 布局

自定义View

public class MyPathView extends View {private Paint mPaint;private Paint mPaintPoint;private int mWidth;private int mHeight;private Path mPath;private Paint mPaintText;private Bitmap mBitmapBubble;private  Canvas mCanvasBit;private int currentProgress;private static final int NEED_INVALIDATE=0X23;private int count=0;private int size=0;private boolean isAdd=true;private Handler handler=new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what){case NEED_INVALIDATE:count+=5;if (count>140){count=0;}if (isAdd){size++;if (size>20){isAdd=false;}}else {size--;if (size<-21){isAdd=true;}}invalidate();handler.sendEmptyMessageDelayed(NEED_INVALIDATE,50);break;}}};public int getCurrentProgress() {return currentProgress;}public void setCurrentProgress(int currentProgress) {this.currentProgress = currentProgress;invalidate();//告诉UI线程重新绘制}public MyPathView(Context context, AttributeSet attrs) {super(context, attrs);mPaint=new Paint();mPaint.setColor(Color.RED);mPaint.setStyle(Paint.Style.FILL);
//        mPaint.setStrokeWidth(5);
//        mPaint.setTextSize(50);mPaint.setAntiAlias(true);//设置抗锯齿mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));//只允许相交部分显现mPath=new Path();mPaintText=new Paint();mPaintText.setAntiAlias(true);mPaintText.setTextSize(100);mPaintText.setColor(Color.GREEN);mPaintText.setTextAlign(Paint.Align.CENTER);mPaintPoint=new Paint();mPaintPoint.setColor(Color.BLUE);mPaintPoint.setStrokeWidth(10);mPaintPoint.setStyle(Paint.Style.FILL);handler.sendEmptyMessageDelayed(NEED_INVALIDATE,1000);}public MyPathView(Context context) {super(context);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);mWidth = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);mHeight = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));mBitmapBubble=Bitmap.createBitmap(mWidth,mHeight,Bitmap.Config.ARGB_8888);mCanvasBit=new Canvas(mBitmapBubble);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawColor(Color.argb(0xff, 0x08, 0x7e, 0x72));//设置画布的颜色mCanvasBit.drawCircle(300, 300, 150, mPaintPoint);mPath.reset();mPath.moveTo(500, 450-currentProgress*300/100);mPath.lineTo(500, 500);mPath.lineTo(count, 500);mPath.lineTo(count,450-currentProgress*300/100);
//        mPath.reset();//重置,避免波浪线加宽
//        mPath.moveTo(count, mHeight / 2);for (int i=0;i<10;i++){//画出十个波浪形mPath.rQuadTo(20,8,40,0);mPath.rQuadTo(20,-8,40,0);}mPath.close();mCanvasBit.drawPath(mPath, mPaint);canvas.drawBitmap(mBitmapBubble, 0, 0, null);canvas.drawText(currentProgress + "%", 300, 300,mPaintText);}}

主函数

public class MainActivity extends AppCompatActivity {private Button mButtonStart;private MyPathView myPathView;private int progress;private Handler handler=new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what){case 0x23:progress++;if (progress<=100){myPathView.setCurrentProgress(progress);handler.sendEmptyMessageDelayed(0x23,200);}break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mButtonStart= (Button) findViewById(R.id.button_start);myPathView= (MyPathView) findViewById(R.id.myPathView);mButtonStart.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {handler.sendEmptyMessageDelayed(0x23,1000);}});}}

布局

<com.example.administrator.definedviewdemo.Wiget.MyPathViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/myPathView"/><Buttonandroid:id="@+id/button_start"android:text="CPU占有率"android:layout_width="wrap_content"android:layout_height="wrap_content" />

Android绘图:360加速球相关推荐

  1. android 自定义progressbar demo,Android自定义View――动态ProgressBar之模仿360加速球

    在之前一篇文章中我们讲解了三种ProgressBar的做法,详见-><Android 自定义View--自定义ProgressBar >.这一节中我们模仿360加速球制作一个动态Pr ...

  2. android悬浮球代码,Android 仿360悬浮球与加速球

    先来看一张动态图 昨天跟着视频学了如何自定义View并做成仿360悬浮球与加速球的样式 可以看出来,做成的效果有: 点击按钮后退出Activity,呈现一个圆形的悬浮球,可以随意拖动并会自动依靠到屏幕 ...

  3. android 悬浮球动画,Android 仿360悬浮球与加速球

    先来看一张动态图 昨天跟着视频学了如何自定义View并做成仿360悬浮球与加速球的样式 可以看出来,做成的效果有: 点击按钮后退出Activity,呈现一个圆形的悬浮球,可以随意拖动并会自动依靠到屏幕 ...

  4. 360加速球 android,Android加速球、360加速球

    先看效果图,这个加速球是动态的,并且当调用了myView.setRefresh(0.8F);方法后可以从当前值动态降到0再升到80%,期间可以看到颜色的变化. 源码: package com.ww.v ...

  5. [MFC] WS_EX_LAYERED 实现透明异形窗口(酷狗歌词、360加速球、窗口边缘阴影)

    关键词:WS_EX_LAYERED. UpdateLayeredWindow PC应用不少都有透明的异形窗口  比如以下程序的效果: 酷狗音乐播放器的歌词窗口(窗口除了歌词内容 其他都是透明的) 36 ...

  6. html5 加速球 效果,css 渐隐渐现、echarts 圆环图、百度地图覆盖物、echarts水球图(360加速球效果)...

    说一下知识点: 1.水球是echarts的插件echarts-liquidfill,官网下载-扩展下载中可以拿到,git传送阵https://github.com/ecomfe/echarts-liq ...

  7. android代码实现手机加速功能,Android自定义View实现内存清理加速球效果

    Android自定义View实现内存清理加速球效果 发布时间:2020-09-21 22:21:57 来源:脚本之家 阅读:105 作者:程序员的自我反思 前言 用过猎豹清理大师或者相类似的安全软件, ...

  8. android动画平移 加速,Android动画总结

    Android中的动画大致上分为视图动画(View Animation)和属性动画(Property Animation)两种,其中视图动画又分为补间动画(Tween Animation)和帧动画两种 ...

  9. Android绘图Canvas十八般武器之Shader详解及实战篇(下)

    前言 上一篇<Android绘图Canvas十八般武器之Shader篇(上)> 我们知道了Bitmap的用法,及TileMode的详细情况.接下来,这一篇作为整个知识体系的下半部要讲的是S ...

最新文章

  1. python练习_Python随笔31:Python基础编程练习题27~28
  2. 资源|计算机视觉实战操作(PDF下载)
  3. jmeter web监听结果_JMeter 性能测试基本过程及示例
  4. 动态代理及工厂的简单实现
  5. VisualStudio代码样式-我最喜欢的一种风格
  6. springmvc拦截器无法拦截jsp
  7. Boost:字符串正则表达式的测试程序
  8. Shell数组相关操作
  9. 机器学习kaggle竞赛实战-泰坦尼克号
  10. 【剑指offer】面试题10- I:斐波那契数列(Java)
  11. PyQt5笔记(04) -- 文本框的使用
  12. nginx源码分析(2)——http模块的初始化过程
  13. OpenGL入门学习 课程 (三) 绘制几何图形的一些细节问题
  14. [LintCode] Swap Nodes in Pairs
  15. 【转】java注解-最通俗易懂的讲解
  16. WIN32汇编列表框的使用
  17. MyBatis3详细教程-从入门到精通
  18. 微信公众号 开发详解03【开通原创、模板设置、排版设置、编辑器介绍】
  19. JavaScript的回调函数及Ajax中的回调函数
  20. Pytorch错误:RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 1. Got 6

热门文章

  1. 网页中嵌入Flash的方法
  2. dreamware jquery 代码提示
  3. 系统备份软件测试,备份软件测试方案
  4. 内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档 的处理方法...
  5. echarts初次渲染不出来
  6. 小米8se账号锁_小米8SE MIUI11_9.11.21解账户锁_屏幕锁 纯净ROM ROOT优化版V1.0
  7. 【转】软件测试修炼之道
  8. 从世界五百强及中国五百强企业网站设计风格看当前WEB设计潮流
  9. (附源码)SSM学生档案管理系统JAVA计算机毕业设计项目
  10. 无需更新硬件的智能布线管理解决方案