欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 自定义View动画效果进阶

程序员文章站 2024-03-21 12:48:52
...
Android 自定义View动画效果进阶

 之前写过一篇有关于自定义ViewGroup的博客,道理很简单,理解之后自己想写什么样的就写什么样的空间。
今天写我的第二个博客。。。
给大家讲一下自定义View,也是公司的一个需求,实现类似Desigin动画的各种酷刑交互效果,写好了是真的酷炫。
先再讲一下自定义View
主要就是paint 和 Canvas 这些就不细讲了,各种具体方法网上自己细查吧。使用起来不算难
就是在onDraw里面画布局。
今天讲的酷炫动画主要是用了ValueAnimator 之前没怎么接触过这个,一般都是ObjectAnimator实现动画,自定义View加ValueAnimator加共享元素是真的酷炫。
不知道共享元素的就问度娘吧,好多讲解,但是共享动画不能视频android 5.0以下的机型,直接给你们个三方库

compile 'com.kogitune:pre-lollipop-activity-transition:1.0.0'
用法如下
这是启动页面
ActivityTransitionLauncher.with(MainActivity.this).from(clickView).launch(new Intent(MainActivity.this, PrograssActivity.class)); 
这是接收页面
 ActivityTransition.with(getIntent()).to(transView).start(savedInstanceState);
这就不细讲了,网上有共享动画的实现方法和4.x的实现方法
下面我们来讲酷炫的自定义 View先上图
Android 自定义View动画效果进阶
怎么样酷炫吧这是一套自定义View

其实没什么难度,就讲一下一开始的啊
其实就是先画个圆环
RectF oval = new RectF(x, y, x1, y1);
paint.setColor(Color.WHITE);//设置圆环的颜色
paint.setStyle(Paint.Style.STROKE);//设置空心
paint.setAntiAlias(true);//消除锯齿
paint.setStrokeWidth(Utils.dip2px(getContext(), 2));
paint.setAlpha(255 - alpha);
canvas.drawArc(oval, -90, circle, false, paint);//根据进度画圆弧 

ValueAnimator animator = ValueAnimator.ofFloat(0, 360);
animator.setDuration((long) 1000).setRepeatCount(0);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        Float angle = (Float) animation.getAnimatedValue();
        circle = angle;
        invalidate();
    }
});
animator.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        AlphaMax();
    }
});
// 自定义开始减速到0后加速到初始值的Interpolator
animator.setInterpolator(new LinearInterpolator());
animator.start();

circle就是进度,重点是ValueAnimator 后面跟的是开始值0,360的意思就是一圈
然后你就可以通过监听直接获取出值的变化
下面是监听动画结束来开始下一个动画
LinearInterpolator是插值器,可以自定义,网上有几个系统自带的基本插值器,自己写就够用了

我这些动画就是一个接一个接出来的只要算好画出来的图形的值就行,各种酷炫动画都可以实现。
不喜勿怪啊,要是有问题评论啊