У меня довольно странная проблема с виджетом Gallery
в одном из моих приложений, и я думаю, что пришло время спросить кого-то еще об этом, так как он беспокоит меня очень долго.
Я использую пользовательский Adapter
для виджета Gallery
, и я надуваю пользовательский макет для каждого элемента в Gallery
в этом Adapter
. Вы можете увидеть код для Adapter
и макеты ниже. Виджет Gallery
в настоящее время не использует Views
, поэтому я не использую трюки ViewHolder
и т. Д.
Проблема
Проблема в том, что я испытываю "скачки" в виджете Gallery
, когда он работает на экранах планшетов, но он отлично работает на мобильных телефонах. Я использую разные макеты для обоих типов устройств и знаю, что они используются правильно - я достаточно тщательно это проверил.
Что я пробовал
- Изменение ширины / высоты макета элемента
Gallery
- без изменений. Но если я установлю цвет фона, он появится.
- Попытка удалить интервал
Gallery
, но из-за этого Gallery
элементы перекрывают друг друга
- Убедился, что
Adapter
работает и загружается правильная раскладка
- Убедитесь, что я не изменяю настройки
Adapter
в коде
- Очистка проекта
Видео примеры выпуска
Два устройства используют один и тот же пакет приложений с одной и той же кодовой базой, единственное отличие состоит в макетах, как показано ниже.
НЕ РАБОТАЕТ - На планшете (Acer Iconia A500 - 10 дюймов, 1280 x 800, мдд): http://www.youtube.com/watch?v=vN2d61_Ojsc
РАБОТА - на мобильном телефоне (Samsung Galaxy Nexus - 4,7 дюйма, 720 x 1280, xhdpi): http://www.youtube.com/watch?v=j8s-JfwWofo
Код - Галерея адаптера
public class ImageAdapter extends BaseAdapter {
LayoutInflater inflater;
public ImageAdapter() {
inflater = (LayoutInflater) Main.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return coverFileNames.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
convertView = (ImageView) inflater.inflate(R.layout.main_large_img, null);
((ImageView) convertView).setImageBitmap(coverFileNames.get(position));
return convertView;
}
}
Код - Основная раскладка
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alwaysDrawnWithCache="true"
android:animationCache="true"
android:orientation="vertical" >
<TextView
android:id="@+id/txtMainTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="0sp"
android:paddingLeft="30sp"
android:paddingTop="20sp"
android:shadowColor="#000000"
android:shadowDx="1.0"
android:shadowDy="1.0"
android:shadowRadius="1.0"
android:text="@string/mainMyMoviesTitle"
android:textAppearance="?android:attr/textAppearanceLarge" >
</TextView>
<TextView
android:id="@+id/txtNumberofMovies"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="30sp"
android:shadowColor="#000000"
android:shadowDx="1.0"
android:shadowDy="1.0"
android:shadowRadius="1.0"
android:text="@string/mainNumberofMovies"
android:textAppearance="?android:attr/textAppearanceSmall" >
</TextView>
<Gallery
android:id="@+id/gallery1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:spacing="20dp"
android:unselectedAlpha="1.0" >
</Gallery>
</LinearLayout>
Код - Расположение элементов галереи (планшет, layout-xlarge-land-mdpi
)
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLargeImg"
android:layout_width="374dp"
android:layout_height="600dp"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:maxHeight="600dp"
android:maxWidth="374dp"
android:minHeight="600dp"
android:minWidth="374dp"
android:scaleType="fitXY"
android:src="@drawable/noposterxl" />
Код - Расположение элементов галереи (телефон, layout-normal-port-xhdpi
)
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLargeImg"
android:layout_width="188dp"
android:layout_height="300dp"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:maxHeight="300dp"
android:maxWidth="188dp"
android:src="@drawable/noposterxl" />
PS. Рассматриваемое приложение - Mizuu - на Маркете есть бесплатная версия, которую вы можете попробовать сами, чтобы увидеть проблему. Это происходит, когда вы проводите горизонтальную прокрутку, и следующее изображение вот-вот будет показано. Бесплатная версия в настоящее время только для планшетов.