ImageViews иногда не отображаются в активности FrameLayout

Макет верхнего уровня в моей деятельности - это макет кадра. Я завершил, отладил и протестировал это приложение, и оно работает точно так же, как и должно во всех отношениях на моем g1 и на различных эмуляторах. Но на 3,7-дюймовых дисплеях с версией 2.1+ некоторые изображения, упакованные в линейный макет, периодически не видны. Я знаю, что они там, потому что вы можете коснуться и перетащить их в приложении. Поэтому я предполагаю, что они каким-то образом попали под SurfaceView, который является основным компонентом приложения. По-видимому, это так, даже несмотря на то, что SurfaceView объявлен в xml до LinearLayout. Однако ImageViews IN LinearLayout программно добавляются ближе к концу onCreate().

Framelayout укладывает все, что к нему добавляется, одно поверх другого — единственный способ увидеть более одного дочернего элемента макета фрейма — это если они меньше экрана и расположены отдельно друг от друга.

Как ни странно, иногда изображения видны - это случайно. Во всяком случае, я безуспешно пытался бороться с этим с помощью framelayout.bringChildToFront(View v) на linearlayout.

Интересно, есть ли у кого-нибудь понимание того, как поведение может быть таким случайным, и как я должен кодировать эти изображения, чтобы этого не происходило, и почему проблема возникает только на экранах 3,7 против 3,2 дюйма (как это бывает, два 3,2-дюймовых экрана оба были htc, так что производитель тоже может иметь значение).

[править] На самом деле, я определил, что это проблема 2.2, а не проблема размера экрана (или даже поставщика). Невозможно гарантировать, что изображения ImageView, добавленные в макет фрейма с включенным в него SurfaceView, будут отображаться поверх представления поверхности. Я провел несколько тестов в соответствующих методах onDraw(), и изображения «видимы» (0), и ничего не делает с альфа-каналом рисунков, которые также есть в ondraw(). [/редактировать]

Любое понимание будет приветствоваться.

Кен Т.


person Ken    schedule 11.01.2011    source источник


Ответы (1)


Мне пришлось рисовать чертежи в методе doDraw() SurfaceView, и мне пришлось изменить имена файлов чертежей. Я думаю, что это был случай вредоносного кода где-то. Мне пришлось отказаться от ImageView и перенести свой код обработки касаний в другое место.

person Ken    schedule 17.01.2011