淡出动画作品,但相反淡入动画不(Fade out animation works but oppos

2019-10-18 18:04发布

        int imgSize = 30;

        final ShapeDrawable redDot = new ShapeDrawable(new OvalShape());
        redDot.getPaint().setColor(Color.RED);
        redDot.setIntrinsicHeight(imgSize);
        redDot.setIntrinsicWidth(imgSize);

        final Bitmap bitmap = Bitmap.createBitmap(imgSize, imgSize, Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bitmap); 
        redDot.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        redDot.draw(canvas);

        ImageView imgAnimArea = new ImageView(getActivity());
        imgAnimArea.setImageBitmap(bitmap);
        imgAnimArea.setScaleType(ImageView.ScaleType.CENTER);

        animationsView.addView(imgAnimArea);

        final AnimationSet animSetRedDot = new AnimationSet(true);

//      animSetRedDot.setFillAfter(true);
//      animSetRedDot.setFillEnabled(true);

        Animation aniRepeatFadeIn = null;
        Animation aniRepatFadeOut = null;

        // fade out
        aniRepatFadeOut = new AlphaAnimation(1, 0);
        aniRepatFadeOut.setStartOffset(3000);
        aniRepatFadeOut.setDuration(300);
        animSetRedDot.addAnimation(aniRepatFadeOut);

        // fade out animation works only if remove this part
        aniRepeatFadeIn = new AlphaAnimation(0, 1);
        aniRepeatFadeIn.setStartOffset(6000);
        aniRepeatFadeIn.setDuration(300);
        animSetRedDot.addAnimation(aniRepeatFadeIn);


        imgAnimArea.startAnimation(animSetRedDot);

其简单的代码(至少动画部件),但具有非常奇怪的行为。 基本上动画之前它创建的形状(小红圈)将其转换为位图,并将其添加到animationsView (的FrameLayout)作为ImageView的源( imgAnimArea )。
所以,我的红点淡出,但从来没有出现回来了,它只是部分的淡入淡出的火灾比淡出甚至删除你淡出后的工作情况。 我试图还设置淡出.5f,而不是0。在这种情况下,它淡出知名度的一半。
我也曾经试图动画animationsView ,但结果是一样的-只是淡出部分作品,如果添加部分不褪色,如果添加淡入部分,那么整个动画没有在所有的工作。
我可以看到,没有动画,在所有加入的形状。 此外,我可以在任何情况下,动画完成后看到它。 启用或禁用FillAfter具有完全没有效果。
所以,问题是什么错在这里? 为什么淡入动画不能正常工作? 为什么如果添加淡入动画整个动画不能正常工作?

Answer 1:

在这里,你有两种方法如何做到这一点(见if语句里面的onClick()方法)

一个优选一个不是,则选择是你

final TextView tv = new TextView(this);
tv.setText("click me");
tv.setTextSize(40);
tv.setTextColor(0xffeeeeee);
tv.setBackgroundColor(0xaa00ff00);
tv.setGravity(Gravity.CENTER);
OnClickListener l = new OnClickListener() {
    @Override
    public void onClick(View v) {
        Animation a;

        boolean preferred = true;
        if (preferred) {
            Log.d(TAG, "onClick using custom Interpolator, preferred way");
            // this is a preferred way: custom Interpolator
            a = new AlphaAnimation(0,  1);
            Interpolator i = new Interpolator() {
                @Override
                public float getInterpolation(float input) {
                    return (float) (1 - Math.sin(input * Math.PI));
                }
            };
            a.setInterpolator(i);
        } else {
            Log.d(TAG, "onClick using AnimationSet, NOT preferred way");
            AnimationSet set = new AnimationSet(true);

            AlphaAnimation alpha0 = new AlphaAnimation(1, 0);
            alpha0.setDuration(1000);
            alpha0.setFillEnabled(true);
            alpha0.setFillBefore(false);
            alpha0.setFillAfter(false);
            set.addAnimation(alpha0);

            AlphaAnimation alpha1 = new AlphaAnimation(0, 1);
            alpha1.setDuration(1000);
            alpha1.setFillEnabled(true);
            alpha1.setFillBefore(false);
            alpha1.setFillAfter(false);
            alpha1.setStartOffset(1000);
            set.addAnimation(alpha1);
            a = set;
        }
        a.setDuration(2000);
        tv.startAnimation(a);
    }
};
tv.setOnClickListener(l);
setContentView(tv);


文章来源: Fade out animation works but opposite fade in animation does not