【问题标题】:How do I tell when an image is clipped?如何判断图像何时被剪切?
【发布时间】:2011-09-12 20:40:19
【问题描述】:

如果我有一个包含 ImageViews 的 LinearLayout,我如何编写代码来判断哪个(如果有)被屏幕边缘裁剪?

<LinearLayout android:id="@+id/imagecontainer"
              android:orientation="horizontal"
              android:layoutHeight="wrap_content"
              android:layoutWidth="fill_parent">

    <ImageView android:id="@+id/image1" .../>
    <ImageView android:id="@+id/image2" .../>

     ...

    <ImageView android:id="@+id/imageN" .../>

</LinearLayout>

我想像这样的东西,如果没有人被剪裁,它将返回一个索引或 0。函数调用的语义并不是很重要...我只需要一些方法来判断是否有剪辑,如果有,是谁?

int whichImageIsClipped(LinearLayout root) { ... }

【问题讨论】:

  • 为什么要知道哪张图片被剪裁了?你打算对剪下的图像做什么?
  • 我打算从布局中删除它。我想尽可能多地显示,然后将其余部分移到溢出中。
  • 您确定不想使用 ListView 吗? developer.android.com/reference/android/widget/ListView.html
  • 是的。一方面,这是一个水平的东西。其次,我不希望它滚动。想象一个带有按钮的工具栏,然后是不适合溢出容器的按钮......或类似的东西。但是,我在根布局视图上很灵活。如果有比 LinearLayout 更好的东西来满足我的需求,那就太好了。

标签: android android-layout imageview image-clipping


【解决方案1】:

这可能有点牵强,但您可以在您的每个孩子身上尝试getGlobalVisibleRect(android.graphics.Rect, android.graphics.Point)。如果它返回 false,您就知道它完全不在视野范围内。如果返回 true,则需要将返回的 Rect 与图像的预期大小进行比较。

这能满足你的需要吗?

这是代码,以防有人需要:

public static Boolean isViewClipped(View view) {
  Rect rect = new Rect();
  Boolean completelyObscured = !view.getGlobalVisibleRect(rect);
  return completelyObscured || rect.width() < view.getWidth();
}

【讨论】:

  • 好吧,这部分功能被删掉了,但我怀疑这让我朝着正确的方向前进。谢谢。
猜你喜欢
  • 2022-01-06
  • 2023-03-03
  • 2016-03-05
  • 2021-09-10
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多