动画研究二
来源:互联网 发布:生命数组 编辑:程序博客网 时间:2024/06/09 20:58
了解了动画的基本知识,那么就可以开始实践了。最简单的动画做起,而项目中又经常遇到的,加载动画当然是不二的选择,下面就说一说一个圆圈来回摆动的loading dialog。
来回摆动的圆圈代码如下:
package com.avz.lawson.avengerzz.ui.view.loading;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;import android.view.animation.AccelerateDecelerateInterpolator;import android.view.animation.Animation;import android.view.animation.TranslateAnimation;import com.avz.lawson.avengerzz.R;/** * Created by lawson on 16/2/27. */public class LoadingCircle extends View { private Paint paint; private int width; private int height; private float border; public LoadingCircle(Context context) { super(context); initView(); } public LoadingCircle(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public LoadingCircle(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(); } private void initView() { paint = new Paint(); paint.setColor(getResources().getColor(R.color.light_gray)); border = getResources().getDimension(R.dimen.loading_circle_border); paint.setAntiAlias(true); paint.setStyle(Paint.Style.FILL); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); width = w; height = h; } public void start() { TranslateAnimation animation = new TranslateAnimation(-border, border, 0, 0); animation.setInterpolator(new AccelerateDecelerateInterpolator()); animation.setRepeatMode(Animation.REVERSE); animation.setRepeatCount(Animation.INFINITE); animation.setDuration(500); animation.setStartOffset(0); animation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } }); startAnimation(animation); } public void stop() { clearAnimation(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle(width / 2, height / 2, width / 2, paint); }}
比较基本的思路就是,先画好圆圈的位置,再让它来回摆就行了。而其中摆动动画的部分就不多说了,肯定需要永远重复下去,直到取消加载。而光有它还不够,还得有一个放这个view的dialog,用于dialog相关的需求,比如周围变暗,或者周边区域点击不能取消等等。
加载框代码如下:
package com.avz.lawson.avengerzz.ui.view.loading;import android.app.Dialog;import android.content.Context;import com.avz.lawson.avengerzz.R;/** * Created by lawson on 16/2/23. */public class LoadingDialog extends Dialog { private LoadingCircle loadingCircle; public LoadingDialog(Context context) { super(context, R.style.Avengerzz_Dialog_Transparent); setCanceledOnTouchOutside(false); setContentView(R.layout.layout_loading); loadingCircle = (LoadingCircle) findViewById(R.id.loading_circle); } private void startLoading() { loadingCircle.start(); } private void stopLoading() { loadingCircle.stop(); } @Override public void show() { super.show(); startLoading(); } @Override public void dismiss() { super.dismiss(); stopLoading(); }}
这样一个加载框就出炉了,实际项目中肯定会遇到,而且很多时候都会比这个复杂。
0 0
- 动画研究二
- Android中的动画研究(二)
- 动画类的研究
- 动画类研究设计
- Android动画研究
- Android动画研究
- Android动画研究(一)
- android 动画研究
- 骨骼动画的研究
- 【android】动画效果研究
- 下拉刷新动画研究
- 波纹动画的研究
- 动画研究 一
- adnoid动画研究博客
- Android动画动画二
- 动画二-属性动画
- iOS 动画研究一:丰富多彩的动画
- H5研究六:力学动画/碰撞动画
- 回文串判断与查找
- iOS 越狱恢复(平刷而不是升级)
- [ZOJ 3469]Food Delivery[记忆化搜索]
- 上传Xcode代码到Github(本文全部基于命令行)
- VC++6.0调用Web Services(转)
- 动画研究二
- MFC学习笔记之四(音乐,文字输出,障碍物,弹窗)
- JSP:表单开发【结合session】
- 动态生成的html中无法使用jquery事件的解决方法
- android imageView 获取指定名字的图片、从MyEclipse服务器下载图片
- 设计模式——单例模式(1)
- gdb调试问题记录
- Super Ugly Number
- iOSCoreAnimation动画系列教程(一):CABasicAnimation