android 控件动画效果实现

本文介绍了一种在Android中实现控件动画效果的方法,包括抖动、晃动、闪烁及高亮等效果。通过自定义类SeekAttentionView,利用ObjectAnimator实现控件的动画效果,如x轴和y轴的缩放、旋转以及平移等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           android实现控件抖动,晃动,闪烁,高亮等动画效果实现。

         1. 抖动:

         

  /**
     * view抖动
     * @param iv
     */
    @RequiresApi(api = Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    public static void viewShaking(View iv){
        ObjectAnimator animator = SeekAttentionView.tada(iv);
        animator.setRepeatCount(ValueAnimator.INFINITE);
        animator.start();
    }


      2.晃动:

  /**
     * view晃动
     * @param iv
     */
    @RequiresApi(api = Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    public  static void viewSloshing(View iv){
        ObjectAnimator nopeAnimator = SeekAttentionView.nope(iv);
        nopeAnimator.setRepeatCount(ValueAnimator.INFINITE);
        nopeAnimator.start();
    }
 只要传入对应的view子类即可。

其中 SeekAttentionView 是自定义类:

/**
 * 对控件的抖动
 * 对view的x轴和y轴进行0.9倍到1.1倍的缩放,同时对view进行一定角度的上下旋转。
 * Created by Administrator on 2017/11/13 0013.
 */

public class SeekAttentionView {
    @RequiresApi(api = Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    public static ObjectAnimator tada(View view) {
        return tada(view, 1f);
    }

    /**
     * 控件抖动的方法
     * @param view
     * @param shakeFactor
     * @return
     */
    @RequiresApi(api = Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    public static ObjectAnimator tada(View view, float shakeFactor) {

        PropertyValuesHolder pvhScaleX = PropertyValuesHolder.ofKeyframe(View.SCALE_X,
                Keyframe.ofFloat(0f, 1f),
                Keyframe.ofFloat(.1f, .9f),
                Keyframe.ofFloat(.2f, .9f),
                Keyframe.ofFloat(.3f, 1.1f),
                Keyframe.ofFloat(.4f, 1.1f),
                Keyframe.ofFloat(.5f, 1.1f),
                Keyframe.ofFloat(.6f, 1.1f),
                Keyframe.ofFloat(.7f, 1.1f),
                Keyframe.ofFloat(.8f, 1.1f),
                Keyframe.ofFloat(.9f, 1.1f),
                Keyframe.ofFloat(1f, 1f)
        );

        PropertyValuesHolder pvhScaleY = PropertyValuesHolder.ofKeyframe(View.SCALE_Y,
                Keyframe.ofFloat(0f, 1f),
                Keyframe.ofFloat(.1f, .9f),
                Keyframe.ofFloat(.2f, .9f),
                Keyframe.ofFloat(.3f, 1.1f),
                Keyframe.ofFloat(.4f, 1.1f),
                Keyframe.ofFloat(.5f, 1.1f),
                Keyframe.ofFloat(.6f, 1.1f),
                Keyframe.ofFloat(.7f, 1.1f),
                Keyframe.ofFloat(.8f, 1.1f),
                Keyframe.ofFloat(.9f, 1.1f),
                Keyframe.ofFloat(1f, 1f)
        );

        PropertyValuesHolder pvhRotate = PropertyValuesHolder.ofKeyframe(View.ROTATION,
                Keyframe.ofFloat(0f, 0f),
                Keyframe.ofFloat(.1f, -3f * shakeFactor),
                Keyframe.ofFloat(.2f, -3f * shakeFactor),
                Keyframe.ofFloat(.3f, 3f * shakeFactor),
                Keyframe.ofFloat(.4f, -3f * shakeFactor),
                Keyframe.ofFloat(.5f, 3f * shakeFactor),
                Keyframe.ofFloat(.6f, -3f * shakeFactor),
                Keyframe.ofFloat(.7f, 3f * shakeFactor),
                Keyframe.ofFloat(.8f, -3f * shakeFactor),
                Keyframe.ofFloat(.9f, 3f * shakeFactor),
                Keyframe.ofFloat(1f, 0)
        );

        return ObjectAnimator.ofPropertyValuesHolder(view, pvhScaleX, pvhScaleY, pvhRotate).
                setDuration(1000);
    }

    /**
     * 左右摇晃的效果
     * @param view
     * @return
     */
    @RequiresApi(api = Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    public static ObjectAnimator nope(View view) {
        int delta = view.getResources().getDimensionPixelOffset(R.dimen.spacing_medium);

        PropertyValuesHolder pvhTranslateX = PropertyValuesHolder.ofKeyframe(View.TRANSLATION_X,
                Keyframe.ofFloat(0f, 0),
                Keyframe.ofFloat(.10f, -delta),
                Keyframe.ofFloat(.26f, delta),
                Keyframe.ofFloat(.42f, -delta),
                Keyframe.ofFloat(.58f, delta),
                Keyframe.ofFloat(.74f, -delta),
                Keyframe.ofFloat(.90f, delta),
                Keyframe.ofFloat(1f, 0f)
        );

        return ObjectAnimator.ofPropertyValuesHolder(view, pvhTranslateX).
                setDuration(500);
    }
}
    

        3.闪烁

  private static ObjectAnimator animator;
   /**
     * 闪耀的textview
     */
    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    @RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
    public static void flickerText(View context){
        animator = flicker(context);
        animator.setRepeatCount(ValueAnimator.INFINITE);
        animator.start();
    }
关掉闪烁:

    /**
     * 关掉闪烁
     */
    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    @RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
    public static void notFlickerText(View context){

        if(animator==null){
            animator = flicker(context);
        }
        animator.cancel();
    }
其中flicker()方法是自定义的:

    /**
     * 闪烁方法
     */
    @RequiresApi(api = Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    private  static ObjectAnimator flicker(View context){
        PropertyValuesHolder pvhScaleX = PropertyValuesHolder.ofKeyframe(View.SCALE_X,
                Keyframe.ofFloat(0f, 1f),
                Keyframe.ofFloat(.3f, .9f),
                Keyframe.ofFloat(.4f, .9f),
                Keyframe.ofFloat(.5f, 1.3f),
                Keyframe.ofFloat(.6f, 1.3f),
                Keyframe.ofFloat(.7f, 1.3f),
                Keyframe.ofFloat(.8f, 1.3f),
                Keyframe.ofFloat(.9f, 1.3f),
                Keyframe.ofFloat(1f, 1.3f),
                Keyframe.ofFloat(1.2f, 1.3f),
                Keyframe.ofFloat(1f, 1.3f)
        );

        PropertyValuesHolder pvhScaleY = PropertyValuesHolder.ofKeyframe(View.SCALE_Y,
                Keyframe.ofFloat(0f, 1f),
                Keyframe.ofFloat(.3f, .9f),
                Keyframe.ofFloat(.4f, .9f),
                Keyframe.ofFloat(.5f, 1.3f),
                Keyframe.ofFloat(.6f, 1.3f),
                Keyframe.ofFloat(.7f, 1.3f),
                Keyframe.ofFloat(.8f, 1.3f),
                Keyframe.ofFloat(.9f, 1.3f),
                Keyframe.ofFloat(1f, 1.3f),
                Keyframe.ofFloat(1.2f, 1.3f),
                Keyframe.ofFloat(1f, 1.3f)
        );
        return ObjectAnimator.ofPropertyValuesHolder(context, pvhScaleX, pvhScaleY).
                setDuration(600);
    }
     4.高亮

   

   /**
     * textview 高亮处理
     *
     * @param context:上下文
     * @param iv_backgroundl:textView后面放一个ImageView,当背景
     * @param text:需要高亮处理的文字控件
     * @param mHideAnimation:传个AlphaAnimation的对象,不用初始化,在setHideAnimation方法中判断是否为空进行初始化
     *或者关闭高亮效果
     */
    @RequiresApi(api = Build.VERSION_CODES.FROYO)
    public static void TextViewHeightLight(Context context, View iv_backgroundl, TextView text, AlphaAnimation mHideAnimation) {
        text.setTextColor(context.getResources().getColor(R.color.white));
        iv_backgroundl.setBackgroundResource(R.drawable.roundedsquare_red);
        setHideAnimation(mHideAnimation, iv_backgroundl, 1000);
    }
其中setHideAnimation()方法自定义:

    /**
     * View渐隐动画效果
     */
    @RequiresApi(api = Build.VERSION_CODES.FROYO)
    public static void setHideAnimation(AlphaAnimation mHideAnimation, View view, int duration) {
        if (null == view || duration < 0) {
            return;
        }
        if (null != mHideAnimation) {
            mHideAnimation.cancel();
        }
        mHideAnimation = new AlphaAnimation(1.0f, 0.0f);
        mHideAnimation.setDuration(duration);
        mHideAnimation.setFillAfter(true);
        view.startAnimation(mHideAnimation);
    }






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值