Animator 动画第一次播放正常,之后播放都不正常的问题解决

Animator 动画第一次播放正常,之后播放都不正常的问题解决

问题描述

  第一次点击图片动画播放正常,在点击文字之后,图片没有显示出来,点击空白,播放动画,显示文字。
  写了一个卡片翻转的动画,代码如下:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="#F2F2F2">

    <FrameLayout
        android:layout_width="252dp"
        android:layout_height="336dp"
        android:layout_gravity="center">

        <ImageView
            android:id="@+id/activity_main_image_iv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@mipmap/result" />

        <TextView
            android:id="@+id/activity_main_text_tv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#247BA0"
            android:gravity="center"
            android:text="确定"
            android:textColor="@android:color/white"
            android:textSize="36sp"
            android:visibility="gone" />

    </FrameLayout>

</FrameLayout>

MainActivity.java

package com.zm.animatorerror;

import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private ImageView iv_image;
    private TextView tv_text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        iv_image = (ImageView) findViewById(R.id.activity_main_image_iv);
        tv_text = (TextView) findViewById(R.id.activity_main_text_tv);
        iv_image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv_text.setVisibility(View.VISIBLE);
                AnimatorSet inAnimator = (AnimatorSet) AnimatorInflater.loadAnimator(MainActivity.this, R.animator.rotate_in_anim);
                AnimatorSet outAnimator = (AnimatorSet) AnimatorInflater.loadAnimator(MainActivity.this, R.animator.rotate_out_anim);
                int distance = 16000;
                float scale = getResources().getDisplayMetrics().density * distance;
                iv_image.setCameraDistance(scale);
                tv_text.setCameraDistance(scale);
                outAnimator.setTarget(iv_image);
                inAnimator.setTarget(tv_text);
                outAnimator.start();
                inAnimator.start();
                outAnimator.addListener(new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        super.onAnimationEnd(animation);
                        iv_image.setVisibility(View.GONE);
                    }
                });
            }
        });
        tv_text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv_text.setVisibility(View.GONE);
                iv_image.setVisibility(View.VISIBLE);
            }
        });
    }
}

问题原因

  Animator 动画会修改控件的属性值,第一次动画结束之后,控制的属性值就是动画播放完的属性,所以动画显示不正确。

解决方法

  为动画设置播放监听,在动画结束之后,将控件的属性值设置为原始状态。
  修改代码如下:

    private void initView() {
        iv_image = (ImageView) findViewById(R.id.activity_main_image_iv);
        tv_text = (TextView) findViewById(R.id.activity_main_text_tv);
        iv_image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv_text.setVisibility(View.VISIBLE);
                AnimatorSet inAnimator = (AnimatorSet) AnimatorInflater.loadAnimator(MainActivity.this, R.animator.rotate_in_anim);
                AnimatorSet outAnimator = (AnimatorSet) AnimatorInflater.loadAnimator(MainActivity.this, R.animator.rotate_out_anim);
                int distance = 16000;
                float scale = getResources().getDisplayMetrics().density * distance;
                iv_image.setCameraDistance(scale);
                tv_text.setCameraDistance(scale);
                outAnimator.setTarget(iv_image);
                inAnimator.setTarget(tv_text);
                outAnimator.start();
                inAnimator.start();
                outAnimator.addListener(new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        super.onAnimationEnd(animation);
                        iv_image.setVisibility(View.GONE);
      ***********************************修改部分**************************************
                        iv_image.setAlpha(1.0f);
                        iv_image.setRotationY(0.0f);
      ***********************************修改部分**************************************
                    }
                });
            }
        });
        tv_text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv_text.setVisibility(View.GONE);
                iv_image.setVisibility(View.VISIBLE);
            }
        });
    }

原文地址:https://www.cnblogs.com/zhangmiao14/p/10411471.html

时间: 2024-10-18 06:30:39

Animator 动画第一次播放正常,之后播放都不正常的问题解决的相关文章

Unity3D中通过Animator动画状态机获取任意animation clip的准确播放持续时长

Unity3d 4及之前的版本中动画的播放用的animation,可直接获取其播放持续长度.但5.x及以后的版本中都是用animator来播放动画了. https://docs.unity3d.com/Manual/AnimationOverview.html While Mecanim is recommended for use in most situations, Unity has retained its legacy animation system which existed b

css3动画应用-音乐唱片旋转播放特效

css3动画应用-音乐唱片旋转播放特效 核心点: 1.设置图片为圆形居中,使图片一直不停旋转. 2.文字标题(潘玮柏--反转地球)一直从左到右不停循环移动. 3.点击图标,音乐暂停,图片停止旋转:点击图片,音乐播放,图片开始旋转. 1.动设置图片为圆形居中,使图片一直不停旋转. 核心代码: #xuanzhuan{ -webkit-animation: play 10s linear infinite; -moz-animation: play 10s linear infinite; anima

大家对湖南卫视播放古剑奇谭的速度都有什么看法?

古剑奇谭电视剧在线播放    谢文东2在线观看 大家对湖南卫视播放古剑奇谭的速度都有什么看法?

5步告诉你QQ音乐的完美音质是怎么来的,播放器的秘密都在这里

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由QQ音乐技术团队发表于云+社区专栏 一.问题背景与分析 不久前,团队发现其Android平台App在播放MV视频<凤凰花开的路口>时,会带有如电流声一般的杂音,这影响了用户体验. 研发同学在初步定位时,发现有如下特征: Android平台杂音问题必现: iOS.PC平台能正常播放,没有噪音. 然而,各平台都是统一用HLS格式播放,即源头都是一样的.对于该问题,我们的定位思路如下: 梳理视频播放流程: 找到切入点排查. 二.播放流

[Swift通天遁地]八、媒体与动画-(1)实现音频的播放和停止

本文将演示实现对音频播放的控制. 首先确保在项目中,已经安装了所需的第三方类库,点击查看安装的配置文件. 1 platform :ios, '8.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'CryptoSwift', :git => "https://github.com/krzyzanowskim/CryptoSwift"

unity 对Animator动画系统的研究

unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看文章边查阅文档,最好能动手测试. 文章的开始之前,先讲几个基本的知识的: 1.创建动画的一个基本步骤是设置一个unity3d可理解的简化后的骨骼到骨架中实际骨骼的映射:在Mecanim的术语中,这个映射称为Avatar,即avatar是骨骼到骨架的映射. (图片来自网) Avatar主要用于类人骨骼

照相、从相册上取照片、播放音频、播放本地视频、播放网络视频、MPMoviePlayerController

一.照相.从相册上去照片 1. 先判断是否支持照相功能 *判断当前设备是否支持照相功能,支持返回YES 否则返回NO 注意:模拟器不支持照相功能 把握一个原则只要是物理硬件相关的功能模拟器都不支持 例如: UIImagePickerController 专门处理与照片相关的功能类 是一个控制器 继承于导航视图控制器 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]

jqm视频播放器,html5视频播放器,html5音乐播放器,html5播放器,video开发demo,html5视频播放示例,html5手机视频播放器

最近在论坛中看到了很多实用html5开发视频播放,音乐播放的功能,大部分都在寻找答案.因此我就在这里做一个demo,供大家相互学习.html5开发越来越流行了,而对于视频这一块也是必不可少的一部分.如何让你的网站占据优势,就要看你的功能和用户体验了.html5对video还是做了很多优惠的东西,我们使用起来很得心应手. 在过去 flash 是网页上最好的解决视频的方法,截至到目前还算是主流,像那些优酷之类的视频网站.虾米那样的在线音乐网站,仍然使用 flash 来提供播放服务.但是这种状况将会随

(jsp/html)网页上嵌入播放器(常用播放器代码整理) http://www.jb51.net/article/37267.htm

网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助 这个其实很简单,只要在HTML上添加以上代码就OK了,前提是你的电脑上已经安装了播放器,如RealPlay. 复制代码 代码如下: <embed src="C:/mp3/10.19/画心.mp3" width="480" height="100"02. loop="false"