应用场景,View出场逐渐由小到大显示,View退出逐渐由大到小的效果:
代码:
Activity部分:
package com.lenovo.dh.zuidemo.ui.activity;
import android.animation.ObjectAnimator;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.lenovo.dh.zuidemo.R;
public class AnimatorActivity extends AppCompatActivity {
private Button btAnimator,btAnimatorStop;
private ImageView img;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.zui_animator);
btAnimator = (Button)findViewById(R.id.btAnimator);
btAnimatorStop = (Button)findViewById(R.id.btAnimatorStop);
img = (ImageView)findViewById(R.id.img);
btAnimator.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//逐渐消失动画
img.setImageResource(R.mipmap.ic_launcher);
ObjectAnimator animator = ObjectAnimator.ofInt(new WrapView(img),"width",10);
animator.setDuration(10000);
//animator.setRepeatCount(1); //动画重复的次数
animator.start();
}
});
btAnimatorStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//逐渐出现动画
img.setImageResource(R.mipmap.ic_launcher);
Animation animation = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.enlarge);
animation.setFillAfter(true);
img.startAnimation(animation);
}
});
}
class WrapView{
private View view;
private int width;
private int height;
public WrapView(View view){
this.view = view;
}
public int getWidth(){
return view.getLayoutParams().width;
}
public void setWidth(int width){
this.width = width;
view.getLayoutParams().width = width;
view.requestLayout();
}
public int getHeight(){
return view.getLayoutParams().height;
}
public void setHeight(){
this.height = height;
view.getLayoutParams().height = height;
view.requestLayout();
}
}
}
layout部分:
zui_animator.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<Button
android:id="@+id/btAnimator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="10dp"
android:layout_marginRight="30dp"
android:text="动画逐渐消失"
/>
<Button
android:id="@+id/btAnimatorStop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="10dp"
android:layout_marginRight="30dp"
android:text="动画逐渐出现"
/>
<ImageView
android:id="@+id/img"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp"
/>
</LinearLayout>
res/anim部分:
enlarge.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
>
<scale
android:duration="10000"
android:fromXScale="0"
android:fromYScale="0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="0"
android:toXScale="1.0"
android:toYScale="1.0"
/>
<!--
//动画消耗的时长
android:duration="1000"
//动画开始前X,Y的缩放,0.0为不显示,1.0为正常显示
android:fromXScale="0"
android:fromYScale="0"
//动画起始位置,相对于屏幕的百分比,两个都为50%,表示从屏幕中间开始
android:pivotX="50%"
android:pivotY="50%"
//动画多次执行的时间间隔,0只执行一次
android:startOffset="0"
//动画最终放大的倍数
android:toXScale="1.0"
android:toYScale="1.0"
-->
</set>
(由于受限,无法上传效果视频)
本文介绍了一种在Android应用中实现View动画渐显渐隐的方法。通过使用ObjectAnimator和AnimationUtils,可以轻松创建View入场逐渐放大显示和离场逐渐缩小的动画效果。代码示例展示了如何设置动画参数,如时长、缩放比例和重复次数。
7140

被折叠的 条评论
为什么被折叠?



