转载请注明出处:王亟亟的大牛之路
上次写了个垃圾桶开盖打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