Android加载动画系列——WifiLoadingAnim
来源:互联网 发布:关键词优化在哪里 编辑:程序博客网 时间:2024/05/18 18:42
Android加载动画系列——WifiLoadingAnim
我们经常会遇到这样一种场景,加载网页的时候,刚好遇到网速不给力,然后就加载失败了,这个时候为了用户友好性原则,我们会给出一个加载失败的页面,有些设计会放置一张wifi的图片,如果把图片换成动画会不会更好呢?让我们来看看wifi加载动画怎么实现吧~
让我们先来看看效果图:
1、WifiLoadingAnim.java源码如下:
public class WifiLoadingAnim extends View { private float mWidth = 0f; private Paint mPaint; private int signalSize = 4; public WifiLoadingAnim(Context context) { this(context, null); } public WifiLoadingAnim(Context context, AttributeSet attrs) { this(context, attrs, 0); } public WifiLoadingAnim(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initPaint(); } private void initPaint() { mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.STROKE); mPaint.setColor(Color.WHITE); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.save(); canvas.translate(0, mWidth / signalSize); mPaint.setStrokeWidth(mWidth / signalSize / 2 / 2 / 2); int scale = (int) ((mAnimatedValue * signalSize - (int) (mAnimatedValue * signalSize)) * signalSize) + 1; RectF rect = null; float signalRadius = mWidth / 2 / signalSize; for (int i = 0; i < signalSize; i++) { if (i >= signalSize - scale) { float radius = signalRadius * i; rect = new RectF( radius, radius, mWidth - radius, mWidth - radius); if (i < signalSize - 1) { mPaint.setStyle(Paint.Style.STROKE); canvas.drawArc(rect, -135, 90 , false, mPaint); } else { mPaint.setStyle(Paint.Style.FILL); canvas.drawArc(rect, -135, 90 , true, mPaint); } } } canvas.restore(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (getMeasuredWidth() > getHeight()) mWidth = getMeasuredHeight(); else mWidth = getMeasuredWidth(); } public void startAnim() { stopAnim(); startViewAnim(0f, 1f, 6000); } private ValueAnimator valueAnimator; private float mAnimatedValue = 0.9f; public void stopAnim() { if (valueAnimator != null) { clearAnimation(); valueAnimator.setRepeatCount(0); valueAnimator.cancel(); valueAnimator.end(); mAnimatedValue = 0.9f; postInvalidate(); } } private ValueAnimator startViewAnim(float startF, final float endF, long time) { valueAnimator = ValueAnimator.ofFloat(startF, endF); valueAnimator.setDuration(time); valueAnimator.setInterpolator(new LinearInterpolator()); valueAnimator.setRepeatCount(ValueAnimator.INFINITE);//无限循环 valueAnimator.setRepeatMode(ValueAnimator.RESTART); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { mAnimatedValue = (float) valueAnimator.getAnimatedValue(); invalidate(); } }); valueAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); } @Override public void onAnimationStart(Animator animation) { super.onAnimationStart(animation); } @Override public void onAnimationRepeat(Animator animation) { super.onAnimationRepeat(animation); } }); if (!valueAnimator.isRunning()) { valueAnimator.start(); } return valueAnimator; } public int dip2px(float dpValue) { final float scale = getContext().getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); }}
2、接下来我们在layout中引用自定义的动画控件,如下所示:
<com.cyril.loadinganim.WifiLoadingAnim android:id="@+id/wifianim" android:layout_width="50dp" android:layout_height="50dp" />
3、然后在Activity中实现动画的播放和停止,使用事例如下:
wifiLoadingAnim = (WifiLoadingAnim) findViewById(R.id.wifianim);wifiLoadingAnim.startAnim();
4、 戳这里,小编带你去源码的下载地址:http://download.csdn.net/detail/zhimingshangyan/9582830
0 0
- Android加载动画系列——WifiLoadingAnim
- Android加载动画系列——BalloonLoading
- Android加载动画系列——WaterBottleLoading
- Android加载动画系列——BatteryLoading
- Android加载动画系列——CircularLoadingAnim
- Android加载动画系列——CircularCDLoadingAnim
- Android加载动画系列——CircularRingLoadingAnim
- Android加载动画系列—— CircularJumpLoadingAnim
- Android加载动画系列—— CircularSmileLoadingAnim
- Android加载动画系列——CircularZoomLoadingAnim
- Android加载动画系列—— LineWithTextLoadingAnim
- Android加载动画系列——PlayBallLoadingAnim
- Android加载动画系列——PlayBallLoadingAnim
- Android加载动画系列——GearsLoadingAnim
- Android加载动画系列——ChromeLogoLoadingAnim
- Android加载动画系列——GearsTwoLoadingAnim
- Android加载动画系列—— GhostLoadingAnim
- Android加载动画系列——FinePoiStarLoadingAnim
- 我相信,终有一天,我会变成自己喜欢的模样
- [LightOJ 1274] Beating the Dataset (期望DP)
- listagg小记录
- win32 Socket网络编程连接
- Web安全渗透
- Android加载动画系列——WifiLoadingAnim
- 指针强制转换
- 【Linux】可重入函数和线程安全的区别与联系
- LINUX集群搭建必备:nat模式设置静态ip,达到上网与主机相互通信
- 设计资源库
- 跟着我左手右手一个慢动作,轻松提交AppStore(AppStore提交App流程最新超详细攻略)(领证篇)
- NN远程教育平台,一键安装,网址无缝对接
- Timus 1104. Don’t Ask Woman about Her Age
- 深度学习入门视频课程学习笔记01