gpt4 book ai didi

android - 如何在 android 中从顶部到屏幕的 300dp 设置动 Canvas 局,反之亦然?

转载 作者:可可西里 更新时间:2023-11-01 19:09:40 25 4
gpt4 key购买 nike

要求

我可以根据 toYDelta="100%toYDelta="50% 等转换布局

但我只想在 300dp 高度 中设置动 Canvas 局。

slide_down.xml

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromYDelta="0"
android:toYDelta="100%" />

slide_up.xml

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromYDelta="100%"
android:toYDelta="0" />

Java代码(动画)

Animation animation = AnimationUtils.loadAnimation(getActivity().getApplicationContext(),R.anim.slide_down);
animation.setAnimationListener(new AnimationListener() {

@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub

}

@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub

}

@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub

// I can hide layout after animation completion

}
});

模型

Animation Mockup

问题

如何根据300dp高度做?

请帮我解决这个问题。

谢谢。

最佳答案

观看动画

令人惊讶的是,似乎没有办法在 XML 中指定 300dp 的翻译动画。翻译动画XML syntax接受三种不同的距离规范:

  • 相对于正常位置的绝对像素(例如 android:toYDelta="10")
  • 相对于元素宽度/高度的百分比(例如 android:toYDelta="10%")
  • 相对于父宽度/高度的百分比(例如 android:toYDelta="10%p")

创建 TranslateAnimation 时,您也必须遵守相同的规范 via Java .但是,在 Java 中,您可以计算等效的绝对像素值(对于给定设备)并将其作为像素平移距离提供。

要获得 300dp,您可以定义 dimen value 300dp 的 XML,或者简单地在代码中执行计算。

dimens.xml 中:

<dimen name="distance">300dp</dimen>

在您的 Activity/Fragment/etc 中:

float distance = getResources().getDimensionPixelSize(R.dimen.distance);

在您的 Activity/Fragment/etc 中:

float distance = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 300,
getResources().getDisplayMetrics()
);

然后您需要做的就是在创建 TranslateAnimation 时使用该距离:

TranslateAnimation animation = new TranslateAnimation(
Animation.ABSOLUTE, 0,
Animation.ABSOLUTE, 0,
Animation.ABSOLUTE, 0,
Animation.ABSOLUTE, distance
);

属性动画

如果您的目标是 Android 3.0 及更高版本,您可以使用新的 Property Animation更优雅地表达相同动画的框架:

view.animate().translationY(distance).setDuration(...).start();

如果您仍然以 Android 2.x 为目标,您可以使用 NineOldAndroids获得向后兼容的动画语法。它将自动为支持它的设备使用新的属性动画。

ViewPropertyAnimator.animate(view).translationY(distance).setDuration(...).start();

关于android - 如何在 android 中从顶部到屏幕的 300dp 设置动 Canvas 局,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23341320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com