写一个把控件丢到垃圾桶的动画其实很简单

本文介绍如何在Android中创建一个将控件投入垃圾桶并消失的动画效果。通过使用ObjectAnimator和平移技术,获取控件相对于垃圾桶的位置,并实现平滑的动画过渡。虽然示例看起来有些简单,但可以通过调整优化动画细节。完整代码和更多Android实用开源项目可在GitHub找到。
摘要由CSDN通过智能技术生成

转载请注明出处:王亟亟的大牛之路

上次写了个垃圾桶开盖打demo,然后说要再写一篇往垃圾桶丢垃圾的demo,延期了一礼拜今天终于逼着自己补完了。

还是老规矩,先安利:

https://github.com/ddwhan0123/Useful-Open-Source-Android

总有一款适合你!


这里写图片描述

效果就是把某个控件丢到垃圾桶里然后这控件就没了(好像有点丑,还是可以继续调的,这个你理解就好)


实现分析

垃圾桶的开关用的是ValueAnimator,而这次的连环拳是ObjectAnimator,ObjectAnimator我去年有些过,可以看:http://blog.csdn.net/ddwhan0123/article/details/50470237

试图的平移等效果都是相对平移,那么我们首先要获取被丢进垃圾桶的控件在activity内的实际坐标

 view.getLocationOnScreen(viewPoint);

得到在页面的(x,y)坐标
然后得到偏移量
x= (x-垃圾桶x)
y= (x-垃圾桶y)


代码
package wjj.com.garbagecandemo.customview;

import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.Keyframe;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Interpolator;

import com.elvishew.xlog.XLog;

import wjj.com.garbagecandemo.R;


/**
 * Created by jiajiewang on 2016/12/15.
 */

public class GabageCan extends View {
   

    private Paint paint;
    private Path path;
    private int viewWidth, viewHeight, picWidth, picHeight;
    private int[] centerPoint;
    private int[] viewPoint;
    private Float canBAnimProgress;
    private ValueAnimator animator;
    private Rect globalRect;

    public GabageCan(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public GabageCan(Context context) {
        super(context);
        init();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setColor(getResources().getColor(R.color.colorAccent));
        //设置画笔
        paint.setStrokeWidth(5f);
//        canvas.drawColor(Color.WHITE);
        //创建下半部分的路径和三条线
        createCanBPath();
        //画路径和线
        canvas.drawPath(path, paint);
        //动画判断是否刷新视图
        if (animator != null && animator.isRunning()) {
            //动画执行过程中具体帧值
            canBAnimProgress = (Float) animator.ge
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值