Как узнать, когда изображение обрезается? - PullRequest
1 голос
/ 11 июня 2011

Если у меня есть LinearLayout, содержащий ImageViews, как я могу написать код, который сообщит, какой из них, если таковой имеется, обрезается по краю экрана?

<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) { ... }

1 Ответ

5 голосов
/ 12 июня 2011

Это может быть растяжка, но вы можете попробовать getGlobalVisibleRect (android.graphics.Rect, android.graphics.Point) для каждого из ваших детей.Если он возвращает ложь, вы знаете, что это полностью вне поля зрения.Если он вернет true, вам нужно будет сравнить возвращенный Rect с ожидаемым размером вашего изображения.

Это работает для того, что вам нужно?

Вот код, на случай, если кому-то понадобитсяэто:

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