我有一个布局资源文件:
<?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>
在某个时间点,此布局将显示在我的活动中。此时,我会将thumbnail
ImageView
的可见性设置为View.VISIBLE
,然后我想将其设置为动画,占据屏幕宽度/高度的30%,位于来自左上角的marginPixels
(在我的测试设备上,marginPixels
是48)。这会暴露潜在的View
,但thumbnail
接管的部分除外。
为此,我有以下Java:
thumbnail.setVisibility(View.VISIBLE);
thumbnail
.animate()
.scaleX(0.3f)
.scaleY(0.3f)
.x(marginPixels)
.y(marginPixels)
.setDuration(animDuration);
结果是动画发生了,但thumbnail
位于FrameLayout
的中心。
我试过了:
布局XML中的android:layout_gravity="top|left"
上有ImageView
和没有translationX(marginPixels)
translationY(marginPixels)
/ x(marginPixels)
代替y(marginPixels)
/ translationXBy(marginPixels)
translationYBy(marginPixels)
/ x(marginPixels)
代替y(marginPixels)
/ thumbnail
似乎没有效果。 x()
始终居中。如果我注释掉y()
和scaleX()
来电,结果也会居中,这表明由于某些原因,它们会被忽略。相反,如果我注释掉scaleY()
和x()
来电(保留y()
和thumbnail
,如原始商家信息中所示),setX()
会被翻译为正确的位置,但它仍然是全尺寸的。如果我在动画播放之前在setY()
上使用thumbnail
和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);
上使用的正确方法,所以我想弄清楚我哪里出错了。
更新:此代码有效(或至少接近 - 我实际上并未测量结果以确认精确的像素位置):
x
我不理解为什么需要这些计算。 IOW,为什么y
和{"error":{"errors":[{"domain":"global","reason":"lockedDomainExpired","message":"Locked Domain Expired"}],"code":401,"message":"Locked Domain Expired"}}
取决于规模?
答案 0 :(得分:4)
设置scale
(使用setScale
或通过动画设置)时,会考虑pivot
个值。默认值pivotX
和pivotY
分别是width
的一半和height
的一半(分别)。因此,当pivots
为View
时,默认View
的任何缩放都会导致scale
从1.0f
的中心缩放(或朝向X
。
Y
和translationX
(以及translationY
和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);
(纵向和横向)移动。
如果您尝试以下代码,您将看到一切都按预期工作。
sass --watch style.scss:path/to/file1.css style.scss:path/to/file2.css