gpt4 book ai didi

android - 如何将 View 缩小并滑入左上角?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:43:08 28 4
gpt4 key购买 nike

我有一个布局资源文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<!-- other widget here -->

<ImageView
android:id="@+id/thumbnail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFFFF"
android:layout_gravity="top|left"
android:visibility="gone"/>

</FrameLayout>

在某个时间点,这个布局将显示在我的 Activity 中。那时,我将设置 thumbnail ImageView 的可见性为 View.VISIBLE,然后我想将其动画化以占用 30屏幕宽度/高度的百分比,位于左上角的 marginPixels(在我的测试设备上,marginPixels 为 48)。这将公开底层 Viewthumbnail 接管的部分除外。

为此,我有以下 Java:

thumbnail.setVisibility(View.VISIBLE);
thumbnail
.animate()
.scaleX(0.3f)
.scaleY(0.3f)
.x(marginPixels)
.y(marginPixels)
.setDuration(animDuration);

结果是动画发生了,但是 thumbnail 位于 FrameLayout 的中心。

我试过:

  • 布局 XML 中的 ImageView 上有和没有 android:layout_gravity="top|left"

  • translationX(marginPixels)/translationY(marginPixels) 而不是 x(marginPixels)/y(marginPixels)

  • translationXBy(marginPixels)/translationYBy(marginPixels) 而不是 x(marginPixels)/y(marginPixels)

似乎没有任何影响。 thumbnail 始终居中。如果我注释掉 x()y() 调用,结果也会居中,表明由于某种原因,它们被忽略了。相反,如果我注释掉 scaleX()scaleY() 调用(留下 x()y() 如原始 list 所示),thumbnail 被翻译到正确的位置,但它仍然是全尺寸的。如果我在动画之前对 thumbnail 本身使用 setX()setY() 并注释掉 x()y() 调用时,thumbnail 最初位于正确的位置,但一旦缩放动画开始,我就回到了居中位置。

现在,我当然可以计算出要使用的正确值,给定屏幕尺寸等等。但似乎 x()/y() 应该是在 ViewPropertyAnimator 上使用的正确方法,所以我正在尝试找出我哪里出错了。

更新:此代码有效(或至少接近 - 我尚未实际测量结果以确认精确的像素位置):

int x=(int)(-0.35f*(float)bmp.getWidth())+marginPixels;
int y=(int)(-0.35f*(float)bmp.getHeight())+marginPixels;

thumbnail.setVisibility(View.VISIBLE);
thumbnail.setImageBitmap(bmp);
thumbnail
.animate()
.x(x)
.y(y)
.scaleX(0.3f)
.scaleY(0.3f)
.setDuration(animDuration);

我不明白为什么需要这些计算。 IOW,为什么 xy 取决于规模?

最佳答案

设置scale(使用setScale 或通过动画)时,会考虑pivot 值。 pivotXpivotY 的默认值分别是 width 的一半和 height 的一半(分别)。因此,当 scale1.0f

XY(以及 translationXtranslationY)不受 pivots 影响。您可以看到您的 thumbnail 实际上正在移动 marginPixels(垂直和水平)。

如果您尝试以下代码,您会发现一切都按预期工作。

thumbnail.setVisibility(View.VISIBLE);
thumbnail.setPivotX(0);
thumbnail.setPivotY(0);
thumbnail
.animate()
.scaleX(0.3f)
.scaleY(0.3f)
.x(marginPixels)
.y(marginPixels)
.setDuration(animDuration);

关于android - 如何将 View 缩小并滑入左上角?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34498782/

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