Android自动伸展动画,Android Expand/collapse animation(展开收起动画)

//展开

public static void expand(final View v) {

int matchParentMeasureSpec = View.MeasureSpec.makeMeasureSpec(((View) v.getParent()).getWidth(), View.MeasureSpec.EXACTLY);

int wrapContentMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);

v.measure(matchParentMeasureSpec, wrapContentMeasureSpec);

final int targetHeight = v.getMeasuredHeight();

// Older versions of android (pre API 21) cancel animations for views with a height of 0.

v.getLayoutParams().height = 1;

v.setVisibility(View.VISIBLE);

Animation a = new Animation()

{

@Override

protected void applyTransformation(float interpolatedTime, Transformation t) {

v.getLayoutParams().height = interpolatedTime == 1

? LayoutParams.WRAP_CONTENT

: (int)(targetHeight * interpolatedTime);

v.requestLayout();

}

@Override

public boolean willChangeBounds() {

return true;

}

};

// Expansion speed of 1dp/ms

a.setDuration((int)(targetHeight / v.getContext().getResources().getDisplayMetrics().density));

v.startAnimation(a);

}

//收起

public static void collapse(final View v) {

final int initialHeight = v.getMeasuredHeight();

Animation a = new Animation()

{

@Override

protected void applyTransformation(float interpolatedTime, Transformation t) {

if(interpolatedTime == 1){

v.setVisibility(View.GONE);

}else{

v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime);

v.requestLayout();

}

}

@Override

public boolean willChangeBounds() {

return true;

}

};

// Collapse speed of 1dp/ms

a.setDuration((int)(initialHeight / v.getContext().getResources().getDisplayMetrics().density));

v.startAnimation(a);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中,可以使用 `ViewAnimator` 或 `ViewSwitcher` 控件来实现 View 的展开收起动画效果。 `ViewAnimator` 可以用来切换多个 View 之间的切换,包括展开收起动画效果。它可以通过 `showNext()` 和 `showPrevious()` 方法来控制 View 的切换,可以通过 `setInAnimation()` 和 `setOutAnimation()` 方法来设置展开收起动画效果。 示例代码如下: ```java ViewAnimator animator = findViewById(R.id.animator); // 设置展开收起动画效果 Animation inAnimation = AnimationUtils.loadAnimation(this, R.anim.expand_in); Animation outAnimation = AnimationUtils.loadAnimation(this, R.anim.expand_out); animator.setInAnimation(inAnimation); animator.setOutAnimation(outAnimation); // 展开 View animator.showNext(); // 收起 View animator.showPrevious(); ``` 在上面的示例代码中,`R.id.animator` 是一个 `ViewAnimator` 控件的 ID,`R.anim.expand_in` 和 `R.anim.expand_out` 是定义在 res/anim 目录下的动画文件,分别表示展开收起动画效果。 使用 `ViewSwitcher` 也可以实现 View 的展开收起动画效果。`ViewSwitcher` 允许在两个 View 之间进行切换,可以通过 `setInAnimation()` 和 `setOutAnimation()` 方法来设置展开收起动画效果。 示例代码如下: ```java ViewSwitcher switcher = findViewById(R.id.switcher); // 设置展开收起动画效果 Animation inAnimation = AnimationUtils.loadAnimation(this, R.anim.expand_in); Animation outAnimation = AnimationUtils.loadAnimation(this, R.anim.expand_out); switcher.setInAnimation(inAnimation); switcher.setOutAnimation(outAnimation); // 展开 View switcher.showNext(); // 收起 View switcher.showPrevious(); ``` 在上面的示例代码中,`R.id.switcher` 是一个 `ViewSwitcher` 控件的 ID,`R.anim.expand_in` 和 `R.anim.expand_out` 是定义在 res/anim 目录下的动画文件,分别表示展开收起动画效果。 需要注意的是,以上示例代码中展开收起动画效果需要自己定义实现,可以通过 `res/anim` 目录下的 XML 文件来定义动画效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值