我有一个布局资源文件:
在某个时间点,此布局将显示在我的活动中.此时,我将设置thumbnail
ImageView
to 的可见性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
.
我试过了:
两者都具有和不具有android:layout_gravity="top|left"
对ImageView
在布局XML
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);
我不理解的是为什么需要这些计算.IOW,为什么x
并且y
取决于规模?