在android中,如何将屏幕布局从顶部设置为300dp,反之亦然? 要求

在android中,如何将屏幕布局从顶部设置为300dp,反之亦然? 要求,android,animation,slide,Android,Animation,Slide,我可以根据toYDelta=“100%”或toYDelta=“50%”等翻译版面 但我只想在300dp高度中设置布局动画 slide_down.xml 模型 问题 如何在300dp高度的基础上进行 请帮我解决这个问题 谢谢。查看动画 令人惊讶的是,似乎没有办法用XML指定300dp翻译动画。“平移”动画接受三种不同的距离规格: 相对于正常位置的绝对像素(例如,android:toYDelta=“10”) 相对于元素宽度/高度的百分比(例如,android:toYDelta=“10%”) 相对

我可以根据
toYDelta=“100%”或
toYDelta=“50%”等翻译版面

但我只想在
300dp高度中设置布局动画

slide_down.xml 模型

问题 如何在300dp高度的基础上进行

请帮我解决这个问题

谢谢。

查看动画 令人惊讶的是,似乎没有办法用XML指定300dp翻译动画。“平移”动画接受三种不同的距离规格:

  • 相对于正常位置的绝对像素(例如,android:toYDelta=“10”
  • 相对于元素宽度/高度的百分比(例如,
    android:toYDelta=“10%”
  • 相对于父级宽度/高度的百分比(例如,
    android:toYDelta=“10%p”
  • 创建
    TranslateAnimation
    时,您也会受到相同规范的约束。但是,在Java中,您可以计算(给定设备的)等效绝对像素值,并将其作为像素平移距离提供

    要获得300dp,您可以在XML中定义300dp的值,或者只需在代码中执行计算

    内部
    dimens.xml

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

    在您的活动/片段/etc中:

    float distance = getResources().getDimensionPixelSize(R.dimen.distance);
    
    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及以上版本,您可以使用新框架更优雅地表达相同的动画:

    view.animate().translationY(distance).setDuration(...).start();
    
    如果您的目标仍然是Android2.x,您可以使用来获得向后兼容的动画语法。它将自动为支持它的设备使用新属性动画

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

    @Darshak请赏金:)
    TranslateAnimation animation = new TranslateAnimation(
            Animation.ABSOLUTE, 0,
            Animation.ABSOLUTE, 0,
            Animation.ABSOLUTE, 0,
            Animation.ABSOLUTE, distance
    );
    
    view.animate().translationY(distance).setDuration(...).start();
    
    ViewPropertyAnimator.animate(view).translationY(distance).setDuration(...).start();