Android控件入门-自定义动画效果

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MR_HJY/article/details/87909471

xml:

<Button
    android:id="@+id/btn_myanim"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/btn_myanim" />

java:

private CustomAnim ca;
private Button btn_myanim;
btn_myanim = findViewById(R.id.btn_myanim);
btn_myanim.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ca = new CustomAnim();
        ca.setDuration(2000);
        v.startAnimation(ca);
    }
});
CustomAnim.class:
import android.util.Log;
import android.view.animation.Animation;
import android.view.animation.Transformation;


public class CustomAnim extends Animation {
    private static final String TAG = "CustomAnim";

    @Override
    public void initialize(int width, int height, int parentWidth, int parentHeight) {
        //该方法在applyTransformation()之前执行   获取控件的宽高,父容器的宽高
        Log.d(TAG, "initialize: ");
        super.initialize(width, height, parentWidth, parentHeight);
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        // interpolatedTime:补简时间(0-1之间) 动画执行完后,interpolatede是1,执行的过程中interpolated不断的被执行
        Log.d(TAG, "applyTransformation: " + interpolatedTime);
        // Transformation:变化对象
        // t.setAlpha(interpolatedTime);
        // 指定旋转的中心点
        // getMatrix():使用矩阵的形式  setTranslate:设置指定位置
        // t.getMatrix().setTranslate(200,200);
        // 缓慢执行效果
        // t.getMatrix().setTranslate(200 * interpolatedTime, 200 * interpolatedTime);
        // 设置左右摆头的效果  sin(interpolatedTime*10):设置周期,后面的数值越大,动画频率加快
        //                   50:为振幅,数值越大,左右摇摆的距离越大
        t.getMatrix().setTranslate((float)(Math.sin(interpolatedTime*10)*50),0);

        super.applyTransformation(interpolatedTime, t);
    }

}

猜你喜欢

转载自blog.csdn.net/MR_HJY/article/details/87909471