我正在尝试实施类似的事项:
动作线索动画
运动模糊动画
鬼动画
(我不知道“效果”的正确名称)反复改变视图位置。
功能,根据加速度计的变化重复调用:
public void setXY(float x, float y) {
if(view != null) {
overloadPoint.setX(pointX);
overloadPoint.setY(pointY);
}
}
我的目标:
对于更改X,Y动画显示旧视图位置和新视图位置之间的路径(线,曲线)。
或替代目标:
在新旧视图位置之间,我想冻结旧位置并应用例如alpha效果在旧位置查看从1.0f到0.0f,持续时间:100ms。因此,当每隔50ms调用一次方法时,我会看到两个视图。两个视图都会有淡出效果(alpha 1.0f - > 0.0f),但是较旧的将具有较少的alpha。
对于:API> = 21
我试过了:
public void setXY(float x, float y){
final View view = new View(this);
view.setLayoutParams(new LinearLayout.LayoutParams(
25, //TODO
25)); //TODO
view.setBackgroundResource(R.drawable.background_point);
relativeLayout.addView(view);
view.setX(x);
view.setY(y);
//Variant 1:
view.animate()
.alpha(0f)
.setDuration(750)
.setInterpolator(new DecelerateInterpolator())
.withLayer()
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
relativeLayout.removeView(view);
}
})
.start();
//Variant 2:
/*AlphaAnimation anim1 = new AlphaAnimation(1f, 0f);
anim1.setDuration(750);
//anim1.setFillAfter(true);
anim1.setAnimationListener(new Animation.AnimationListener() {
public void onAnimationStart(Animation anim) {};
public void onAnimationRepeat(Animation anim){};
public void onAnimationEnd(Animation anim) {
relativeLayout.removeView(view);
};
});
view.startAnimation(anim1);*/
//Variant 3:
/*view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
ObjectAnimator animator = ObjectAnimator.ofFloat(view, View.ALPHA, 0f);
// Add a listener that does cleanup
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
relativeLayout.removeView(view);
view.setLayerType(View.LAYER_TYPE_NONE, null);
}
});
animator.start();*/
}
但我认为,这些都不是好的解决方案..反复创建和删除视图。用一个视图效果会更好。
谢谢。