这个其实很简单,思路是这样的,就是拿view的宽度,除以点的点的宽度+二个点 之间的间距,就可以算出大概能画出几个点出来,然后就通过canvas画出点,再然后就是每隔多少时间把上面移动的点不断的去改变它的坐标就可以,

效果如下:
分析图:
代码如下:
package com.example.dotloadview;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.View;
/**
* Created by zhouguizhi on 6/18/15.
*/
public class DotLoadProgressView extends View {
private boolean isStart = false;
private int dotIndex =0;//点下面的角标
private int dotNumber = 0;
private Paint mPaint;
private int paddingTop = 50;
private int paddingBottom = 50;
private int paddingLeft = 30;
private int paddingRight = 30;
private Handler mHandler = new Handler();
private long DELAY_TIME = 300;
private Bitmap bitmap;
private int itemDotSpace = 10;//二个点之间的距离
private Bitmap moveBitmap ;
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
if (dotNumber != 0){
dotIndex = (dotIndex + 1) % dotNumber;
}
invalidate();
mHandler.postDelayed(mRunnable, DELAY_TIME);
}
};
public DotLoadProgressView(Context context, AttributeSet attrs) {
super(context, attrs);
moveBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.active_dot);
init();
}
private void init() {
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStyle(Paint.Style.FILL);
mPaint.setDither(true);
mPaint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for(int i=0;i<dotNumber;i++){
canvas.drawBitmap(bitmap,paddingLeft+i*itemDotSpace+bitmap.getWidth()*i,paddingTop,mPaint);
}
if(isStart){
canvas.drawBitmap(moveBitmap,paddingLeft+dotIndex*itemDotSpace+moveBitmap.getWidth()*dotIndex,paddingTop,mPaint);
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.inactive_dot);
setMeasuredDimension(parentWidth,bitmap.getHeight()+paddingTop+paddingBottom);
int widthWithoutPadding = parentWidth - paddingLeft - paddingRight;
dotNumber = calculateDotsNumber(widthWithoutPadding);
}
private int calculateDotsNumber(int width) {
int number = (width / (itemDotSpace + bitmap.getWidth()));
return number;
}
public void startProgress() {
isStart = true;
dotIndex = -1;
mHandler.removeCallbacks(mRunnable);
mHandler.post(mRunnable);
}
public void stopProgress() {
isStart = false;
mHandler.removeCallbacks(mRunnable);
invalidate();
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
startProgress();
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
stopProgress();
}
}
布局代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.example.dotloadview.DotLoadProgressView
android:id="@+id/progress1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</RelativeLayout>
二个点其实是图片,在网上别人项目中拿出来用的,如果感觉那个点图片大了的话,有二个办法,第一叫你们美工切小点,第二就是通过drawable.setBound()去限制他大小了,我在这其实是偷懒,没有那么做,当然这点你也可以通过shade去做,而不用图片的话
最终的效果图还是这样的:
总结
以上所述是小编给大家介绍的Android 自定义view实现进度条加载效果实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# 自定义view
# 进度条
# android
# 自定义进度条
# Android自定义带加载动画效果的环状进度条
# Android开发之ProgressBar字体随着进度条的加载而滚动
# Android自定义View仿华为圆形加载进度条
# Android中WebView加载网页设置进度条
# Android Material加载进度条制作代码
# Android自定义View基础开发之图片加载进度条
# Android Webview添加网页加载进度条实例详解
# Android中实现Webview顶部带进度条的方法
# Android WebView线性进度条实例详解
# Android自定义带进度条WebView仿微信加载过程
# 二个
# 画出
# 小编
# 就可以
# 几个
# 在这
# 在此
# 是这样
# 你也
# 可以通过
# 给大家
# 去做
# 自定义
# 大了
# 每隔
# 所述
# 给我留言
# 感谢大家
# 来用
# 其实很简单
相关文章:
山东云建站价格为何差异显著?
山东网站制作公司有哪些,山东大源集团官网?
如何在阿里云购买域名并搭建网站?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
,网页ppt怎么弄成自己的ppt?
长沙企业网站制作哪家好,长沙水业集团官方网站?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
建站之星代理如何获取技术支持?
如何解决ASP生成WAP建站中文乱码问题?
Python路径拼接规范_跨平台处理说明【指导】
北京网站制作的公司有哪些,北京白云观官方网站?
建站之星伪静态规则如何设置?
制作农业网站的软件,比较好的农业网站推荐一下?
孙琪峥织梦建站教程如何优化数据库安全?
微信h5制作网站有哪些,免费微信H5页面制作工具?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
大连网站制作公司哪家好一点,大连买房网站哪个好?
建站之星安装路径如何正确选择及配置?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
建站之星在线版空间:自助建站+智能模板一键生成方案
家庭服务器如何搭建个人网站?
建站之星2.7模板:企业网站建设与h5定制设计专题
如何高效利用亚马逊云主机搭建企业网站?
微信小程序 五星评分(包括半颗星评分)实例代码
建站之星安装后如何配置SEO及设计样式?
建站之星后台密码遗忘或太弱?如何重置与强化?
c# 服务器GC和工作站GC的区别和设置
深入理解Android中的xmlns:tools属性
内网网站制作软件,内网的网站如何发布到外网?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
如何做网站制作流程,*游戏网站怎么搭建?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
建站之星各版本价格是多少?
建站之星代理如何优化在线客服效率?
红河网站制作公司,红河事业单位身份证如何上传?
宝塔建站后网页无法访问如何解决?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
如何快速上传自定义模板至建站之星?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
长沙做网站要多少钱,长沙国安网络怎么样?
如何用IIS7快速搭建并优化网站站点?
PHP正则匹配日期和时间(时间戳转换)的实例代码
油猴 教程,油猴搜脚本为什么会网页无法显示?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
建站之星伪静态规则如何正确配置?
宝塔新建站点报错如何解决?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
建站之星ASP如何实现CMS高效搭建与安全管理?
*请认真填写需求信息,我们会在24小时内与您取得联系。