#android #image #background #gallery #imageview
#Android #изображение #фон #Галерея #просмотр изображений
Вопрос:
Я новичок в разработке Android, но знаком с концепцией представлений, элементов управления, объектов, XML-макетов, C # и т.д.
Я пытаюсь создать «список» изображений с горизонтальной прокруткой, используя как можно больше встроенной функциональности. (Я не против использования пользовательских компонентов, но я пытаюсь изучить и оптимизировать как можно больше, прежде чем взламывать что-то вместе.)
В настоящее время у меня есть галерея с привязанным к ней адаптером. Адаптер создает просмотры изображений, как показано во многих базовых руководствах. При каждом запуске адаптера я устанавливаю фоновое изображение для просмотра изображений. Я надеялся, что смогу расположить изображение переднего плана так, чтобы оно лежало поверх фонового изображения в определенном положении X / Y. К сожалению, я не дошел до того, чтобы заставить фоновое изображение вести себя так, как мне хотелось бы.
Возможно ли это вообще с помощью простой галереи и ImageView? Или мне нужно создать какой-то пользовательский элемент управления (возможно, используя вложенные макеты?) и использовать этот элемент управления на каждой итерации адаптера?
Любая помощь будет высоко оценена.
Вот что я вижу…
http://philaphan.com/public/stackoverflow/gallery1.png
… и что я хотел бы увидеть…
http://philaphan.com/public/stackoverflow/gallery2.png
Вот мой код:
public class MyAdapter extends BaseAdapter
{
private Context mContext;
public MyAdapter(Context c)
{
mContext = c;
}
public int getCount()
{
return App.myList.size();
}
public Object getItem(int position)
{
return position;
}
public long getItemId(int position)
{
return position;
}
public View getView(int position, View convertView, ViewGroup parent)
{
String imagePath = App.myList.get(position).thumbnail;
ImageView i = new ImageView(mContext);
i.setLayoutParams(new Gallery.LayoutParams(150, 150));
i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
i.setBackgroundResource(R.drawable.image_bk5);
//i.setBackgroundColor(Color.BLACK);
File f = new File(imagePath);
if (!f.exists())
{
i.setImageResource(R.drawable.image_missing);
}
else
{
Bitmap bmp = BitmapFactory.decodeFile(imagePath);
i.setImageBitmap(bmp);
}
return i;
}
}
Комментарии:
1. Пожалуйста, не используйте приветствия в Stack Overflow и не пытайтесь обойти их удаление ( этикет ). Спасибо.
2. @Kev — Как вы можете добавлять короткие ответы под каждым сообщением? Все, что я вижу, это «ссылка», «редактировать» и «отметить», а также кнопку внизу, чтобы добавить другой ответ. Как мне ответить людям, которые пытаются мне помочь? Что касается моего вопроса, мне все еще трудно заставить его работать?
3. вы можете комментировать свои собственные сообщения, но не чьи-либо еще, пока не наберете 50 просмотров. Причина, по которой вы вообще не можете комментировать, заключается в том, что вы продолжаете создавать новые незарегистрированные учетные записи, каждая из которых отличается, и мне приходится постоянно их объединять. Я подозреваю, что это потому, что вы продолжаете очищать свои файлы cookie или каждый раз отправляете сообщения с разных компьютеров. Я бы рекомендовал зарегистрировать учетную запись в SO, чтобы этого не происходило.
4. Спасибо за все, что ты сделал, чтобы добавить функцию комментариев для меня, Кев.
Ответ №1:
Я думаю, вы можете использовать:
i.setPadding(50, 50, 50, 50); //setpadding(left,top,right,bottom)
Ответ №2:
Попробуйте использовать это..
заменить i.setScaleType(ImageView.ScaleType.CENTER_INSIDE); with i.setScaleType(ImageView.ScaleType.FIT_XY);
или проверьте свое фоновое изображение. Я думаю, что ваша ширина фонового изображения создает проблему.
Комментарии:
1. Суджит, я попробовал то, что вы рекомендовали, но теперь я вижу меньшие перекрывающиеся изображения и никаких фоновых изображений (или фоновые изображения находятся за изображениями переднего плана с точно такими же размерами). philaphan.com/public/stackoverflow/gallery3.png
Ответ №3:
Я смог обойти это, используя HorizontalScrollView с вложенным в него LinearLayout. Затем я программно добавляю два просмотра изображений — одно для фона и одно для переднего плана — и размещаю передний план в любом X / Y, который я выбираю.
Мне все еще было бы интересно узнать, можно ли это сделать в элементе управления галереей, если кто-нибудь увидит это позже.
Ответ №4:
Как правило, если вы хотите добавить фоновое изображение в какую-либо расширенную галерею или ArrayAdapter или BaseAdapter, то — Убедитесь, что фоновое изображение определено в родительском макете или родительском представлении, например, в основном макете, используя атрибут «android:background=»@drawable/backupimage«. Не устанавливайте фон в XML, представляющем пользовательский вид строки / объекта повторяющихся экземпляров.
Таким образом, фоновое изображение будет отображаться только один раз, появляясь статичным позади всех раздутых объектов, а не дублироваться снова и снова в каждой отдельной строке / объекте.