Android 动画(从屏幕右边弹出)

需求: 仿微信聊天页面中的未读消息弹出动画
1、定义一个动画xml文件

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--    从屏幕右边出来-->
    <translate
        android:duration="1000"
        android:fromXDelta="100%"
        android:toXDelta="0" />
    <alpha
        android:duration="200"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--    从屏幕右边出来-->
    <translate
        android:duration="1000"
        android:fromXDelta="100%"
        android:toXDelta="0" />
    <alpha
        android:duration="200"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

2、调用

       //屏幕从右屏幕弹出
       Animation animation = AnimationUtils.loadAnimation(Test1Activity.this,R.anim.dialog_left);
       textView.startAnimation(animation);
       textView.setText("36条新消息");
       textView.setPadding(20,0,20,0);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现一个气泡动画,并且不可以超出屏幕,可以使用 ValueAnimator 类和 View 的 layout 参数。以下是一个简单的示例代码,可以让一个气泡在屏幕中进行弹跳动画: MainActivity.java: ``` public class MainActivity extends AppCompatActivity { private ImageView bubble; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bubble = findViewById(R.id.bubble); ValueAnimator animator = ValueAnimator.ofFloat(0, 1); animator.setDuration(2000); animator.setInterpolator(new LinearInterpolator()); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (float) animation.getAnimatedValue(); float x = calculateX(value); float y = calculateY(value); bubble.setX(x); bubble.setY(y); } }); animator.start(); } private float calculateX(float value) { // 计算 x 坐标 float x = value * 500; // 500 是屏幕的宽度 if (x < bubble.getWidth() / 2) { return bubble.getWidth() / 2; } if (x > 500 - bubble.getWidth() / 2) { return 500 - bubble.getWidth() / 2; } return x; } private float calculateY(float value) { // 计算 y 坐标 float y = (float) (400 * Math.sin(value * Math.PI)); if (y < bubble.getHeight() / 2) { return bubble.getHeight() / 2; } if (y > 800 - bubble.getHeight() / 2) { return 800 - bubble.getHeight() / 2; } return y; } } ``` 在这个示例中,我们创建了一个 ValueAnimator 对象,设置了动画时间为 2 秒,插值器为 LinearInterpolator(线性插值器),然后添加了一个动画更新监听器,在监听器中计算出当前时间点的 x 和 y 坐标,并将其应用到 ImageView 上。在 calculateX() 方法中,我们简单地将 x 坐标设置为时间的线性函数,这将导致气泡水平移动。但是,我们还需要确保气泡不会超出屏幕范围,因此我们使用了一些条件语句来限制气泡的位置。在 calculateY() 方法中,我们使用正弦函数来计算出 y 坐标,这将导致气泡上下移动,并产生弹跳的效果。同样,我们使用条件语句来确保气泡不会超出屏幕范围。最后,我们使用 start() 方法启动动画

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值