How to animate gradient?

前端 未结 4 1019
一生所求
一生所求 2020-12-04 18:46

How to animate gradient from color#1 to color#2? Something similar to

I\'m planning to use it as health-bar for unit (so, it will be finit animation starting

4条回答
  •  一向
    一向 (楼主)
    2020-12-04 19:00

    just rewrited @Krzysztof Misztal's answer to java :

    public static void startAnimation(final int view, final Activity activity) {
            final int start = Color.parseColor("#FDB72B");
            final int mid = Color.parseColor("#88FDB72B");
            final int end = Color.TRANSPARENT;
    
    
            final ArgbEvaluator evaluator = new ArgbEvaluator();
            View preloader = activity.findViewById(R.id.gradientPreloaderView);
            preloader.setVisibility(View.VISIBLE);
            final GradientDrawable gradient = (GradientDrawable) preloader.getBackground();
    
            ValueAnimator animator = TimeAnimator.ofFloat(0.0f, 1.0f);
            animator.setDuration(500);
            animator.setRepeatCount(ValueAnimator.INFINITE);
            animator.setRepeatMode(ValueAnimator.REVERSE);
            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator valueAnimator) {
                    Float fraction = valueAnimator.getAnimatedFraction();
                    int newStrat = (int) evaluator.evaluate(fraction, start, end);
                    int newMid = (int) evaluator.evaluate(fraction, mid, start);
                    int newEnd = (int) evaluator.evaluate(fraction, end, mid);
                    int[] newArray = {newStrat, newMid, newEnd};
                    gradient.setColors(newArray);
                }
            });
    
            animator.start();
        }
    
    
    
    
    public static void stopAnimation(final int view, final Activity activity){
    
        ObjectAnimator.ofFloat(activity.findViewById(view), "alpha", 0f).setDuration(125).start();
    }
    

    where the view is a simple View with gradient background:

    //gradient_preloader
    
    
        
    
    

    the view :

    
    

    hope my answer will help

提交回复
热议问题