android 平移缩放动画,【安卓】自定义基于onDraw的随便动画(不仅仅是平移/旋转/缩放/alpha)、...

【安卓】自定义基于onDraw的任意动画(不仅仅是平移/旋转/缩放/alpha)、!

思路:

1.基于时间的显示映射。如:给定度数,显示圆弧,加上时序,即可有圆弧动画的效果

2.给定时序。用于驱动动画的一帧帧绘制

方案一、基于ObjectAnimator。动画运作时会调用degree对应set函数(基于放射调用),即setDegree。

ObjectAnimator ani=ObjectAnimator.ofInt(myView, "degree", 0,300);

ani.start();

注:1>混编后,默认会将setDegree混掉,导致找不到函数,故混编后这种机制会失效。解决方法是1.proguard中防止该段代码混编(具体方法百度) 2.使用方法二

2>ObjectAnimator在3.0后才支持,可使用NineOldAndroids库,效果完全一样。

方案二、仍然基于ObjectAnimator。但基于回调,这种方法未用到反射,故混编时仍ok

ObjectAnimator ani=ObjectAnimator.ofInt(myView, new Prop(), 0,300);

ani.start();

class Prop extends Property {

public Prop() {

// TODO Auto-generated constructor stub

super(Integer.class, "kk");

}

@Override

public void set(View object, Integer value) {

// TODO Auto-generated method stub

((MyView1)object).setDegree(value);

}

@Override

public Integer get(View object) {

// TODO Auto-generated method stub

return null;

}

};

方案三、用animation提供时序。interpolatedTime为0~1,即时间的百分比。

Animation ani=new Animation() {

@Override

protected void applyTransformation(float interpolatedTime,

Transformation t) {

// TODO Auto-generated method stub

myView.setDegree((int)(interpolatedTime*300f));

}

};

ani.setDuration(3000);

myView.startAnimation(ani);

//===========================================================================

自定义视图,setDegress可改变圆弧角度:

private class MyView1 extends ImageView {

public int degree = 0;

public MyView1(Context ct) {

// TODO Auto-generated constructor stub

super(ct);

}

@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.onDraw(canvas);

Rect r = new Rect();

getLocalVisibleRect(r);

canvas.drawArc(new RectF(r), 0, degree, true, pt);

}

public void setDegree(int degree) {

this.degree = degree;

invalidate();

}

}

效果:

144524127.png   

144524128.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值