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);
}
});
}
Animator 动画第一次播放正常,之后播放都不正常的问题解决的更多相关文章
- Unity3D中通过Animator动画状态机获取任意animation clip的准确播放持续时长
Unity3d 4及之前的版本中动画的播放用的animation,可直接获取其播放持续长度.但5.x及以后的版本中都是用animator来播放动画了. https://docs.unity3d.com ...
- 用Unity的Animation播放Animator动画Clip
简单的动画,其实不需要Animator动画状态机管理,用Animation播放效率更高,但可能由于历史遗留问题,或网上下载的第三方资源,得到的是Animator资源,可以在Clip的Debug试图下, ...
- 5步告诉你QQ音乐的完美音质是怎么来的,播放器的秘密都在这里
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由QQ音乐技术团队发表于云+社区专栏 一.问题背景与分析 不久前,团队发现其Android平台App在播放MV视频<凤凰花开的路口 ...
- css3动画应用-音乐唱片旋转播放特效
css3动画应用-音乐唱片旋转播放特效 核心点: 1.设置图片为圆形居中,使图片一直不停旋转. 2.文字标题(潘玮柏--反转地球)一直从左到右不停循环移动. 3.点击图标,音乐暂停,图片停止旋转:点击 ...
- [Swift通天遁地]八、媒体与动画-(1)实现音频的播放和停止
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Unity动画知识之二:Animator动画状态机
上次我们讲过Unity游戏动画从入门到住院,今天我们来讲一下动画状态机. 好了,现在我们已经成功的导入了动画.接下来要玩的东西就很装13啦.因为大部分动画师是用不到这家伙的,需要掌握这个技能的,至少也 ...
- unity 对Animator动画系统的研究
unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看 ...
- 照相、从相册上取照片、播放音频、播放本地视频、播放网络视频、MPMoviePlayerController
一.照相.从相册上去照片 1. 先判断是否支持照相功能 *判断当前设备是否支持照相功能,支持返回YES 否则返回NO 注意:模拟器不支持照相功能 把握一个原则只要是物理硬件相关的功能模拟器都不支持 例 ...
- Openlayers 实现轨迹播放/暂停/重新播放/从点击处播放/提速/减速
说明: 我的需求是需要实现轨迹播放/暂停/重新播放/从点击处播放,因此封装了一个类 解决方案: 1.初始化:主要是处理一下图层以及数据,通过插值构造一个全局数组 /** * @description ...
随机推荐
- 【mongo】查询超时处理
使用no_cursor_timeout collection = self.db[tb_name] cols = collection.find(no_cursor_timeout=True) for ...
- memcpy一种实现方法
#include<stdio.h> #include<stdlib.h> void* memncpy(void* dest, const void* src, int coun ...
- zabbix 修改为UTC 时区的配置
修改php.ini中的date.timezone = UTC还确实是正解,修改后要重新启动apache,另外你应该用phpinfo()检查一下你修改php.ini和phpinfo()中指明的当前php ...
- MYSQL根据节点向上和向下查询所有节点
WITH cte AS ( SELECT * ,UnitID AS level FROM UnitTable WHERE UnitID=2 UNION ALL SELECT g.*,level+1 F ...
- eclipse乱码解决
设置utf-8 1.点击window>preferences>content types 2.点击右侧Text 3.点击Java Source File 4.下面输入UTF-8 5.点击u ...
- UOJ#465. 【HNOI2019】校园旅行 其他
原文链接www.cnblogs.com/zhouzhendong/p/UOJ465.html 前言 tmd并查集写挂,调到自闭. cly和我写挂了同一个地方. 一下救了两个人感觉挺开心. 题解 首先直 ...
- 20175305张天钰《java程序设计》第九周学习总结
<java程序设计>第九周学习总结
- OO Unit 2 电梯调度
目录 OO Unit2 博客作业 基于度量来分析⾃己的程序结构 复杂度分析 架构分析 改进和重构 发现过的BUG 简化问题 多线程初探 OO Unit2 博客作业 基于度量来分析⾃己的程序结构 自认为 ...
- PBRT笔记(10)——体积散射
体散射处理过程 3个影响参与介质在环境中的辐射度分布的主要因素: 吸收:减少光能,并将其转化为别的能量,例如热量. 发光:由光子发射光能至环境中. 散射:由于粒子碰撞,使得一个方向的辐射度散射至其他方 ...
- Spring-Docker简易指南
使用代码:https://files.cnblogs.com/files/miracle9527/demo4springboot.rar # 约定#为注释行.$为命令行 # 开始操作前将demo4s ...