当前位置:  开发笔记 > 编程语言 > 正文

如何收缩并将视图滑入左上角?

如何解决《如何收缩并将视图滑入左上角?》经验,为你挑选了0个好方法。

我有一个布局资源文件:




  

  


在某个时间点,此布局将显示在我的活动中.此时,我将设置thumbnail ImageViewto 的可见性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取决于规模?

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有