Я хотел бы создать приложение с горизонтальной галереей изображений (с одной строкой и несколькими столбцами). Сначала я пытаюсь использовать gridview, но его можно использовать только как вертикальную прокрутку. Могу ли я использовать ListView
или GridView
для этих целей?Android Галерея изображений с горизонтальной прокруткой
ответ
Go с HorizontalScrollView вместо ListView или GirdView http://developer.android.com/reference/android/widget/HorizontalScrollView.html
TwoWayView работал хорошо для меня. https://github.com/lucasr/twoway-view/
HorizontalScrollView Documentation
Для использования HorizontalScrollView вы должны иметь только одного ребенка внутри него. То, как я использовал его раньше, с изображениями, такими как то, что вы делаете, - это создать TableLayout и добавить изображения в TableRows. TableLayout может иметь много строк или всего одну строку и много столбцов.
Вы можете добавить ImageViews (или любой другой вид) в каждую строку, а затем, наконец, добавить TableRow в TableLayout. После того, как TableLayout сделано, все, что вам нужно сделать, это:
//createTable method is where you would loop through the images to add
TableLayout table = createTable(rowCount, columnCount);
HorizontalScrollView hozView = new HorizontalScrollView(this);
hozView.addView(table);
setContentView(hozView);
создать LinearLayout внутри HorizontalScrollView, а затем создать ImageView динамически и добавить, что ImageView в LinearLayout.
Пример кода:
<HorizontalScrollView
android:id="@+id/horizontal_scroll"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/linear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
</LinearLayout>
</HorizontalScrollView>
В OnCreate() метод, получить идентификатор LinearLayout из файла XML и добавить динамически создаваемых ImageView в LinearLayout:
LinearLayout layout = (LinearLayout) findViewById(R.id.linear);
for (int i = 0; i < 10; i++) {
ImageView imageView = new ImageView(this);
imageView.setId(i);
imageView.setPadding(2, 2, 2, 2);
imageView.setImageBitmap(BitmapFactory.decodeResource(
getResources(), R.drawable.ic_launcher));
imageView.setScaleType(ScaleType.FIT_XY);
layout.addView(imageView);
}
У меня разные картинки с различными пропорциями. Я хочу, чтобы все они заполняли высоту линейного прохода, который, в свою очередь, заполнял Enity HorizontalScrollView. Как мне подойти к этим решениям? – KasparTr
Это замечательно. Как вы ленитесь с помощью этого метода? – justdan0227
Работая спасибо, но я хочу загрузить различное изображение из arraylist.How, чтобы достичь этого. – Punithapriya
Поскольку мы no longer have в Gallery
виджет требуется немного DIY-мышки. Вы можете создать горизонтально прокрутки полосы миниатюр с HorizontalScrollView
и вложенной LinearLayout
и динамически добавлять изображения к нему из вашей деятельности:
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="72dp"
android:layout_gravity="bottom"
android:background="@color/black">
<LinearLayout
android:id="@+id/thumbnails"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingTop="2dp"/>
</HorizontalScrollView>
ниже код взят из этого урока: http://sourcey.com/android-horizontally-scrolling-pan-scan-and-zoom-image-gallery/ GalleryActivity
реализует то, что вы «ищет, а также расширяет свой запрос, добавив ViewPager
элемент для отображения выбранного изображения и SubsamplingScaleImageView
, так что вы можете панорамировать, сканировать и увеличить выбранное изображение:
package com.sourcey.imagegallerydemo;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v7.app.AppCompatActivity;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.davemorrissey.labs.subscaleview.ImageSource;
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
import junit.framework.Assert;
import java.util.ArrayList;
import butterknife.ButterKnife;
import butterknife.InjectView;
public class GalleryActivity extends AppCompatActivity {
public static final String TAG = "GalleryActivity";
public static final String EXTRA_NAME = "images";
private ArrayList<String> _images;
private GalleryPagerAdapter _adapter;
@InjectView(R.id.pager) ViewPager _pager;
@InjectView(R.id.thumbnails) LinearLayout _thumbnails;
@InjectView(R.id.btn_close) ImageButton _closeButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
ButterKnife.inject(this);
_images = (ArrayList<String>) getIntent().getSerializableExtra(EXTRA_NAME);
Assert.assertNotNull(_images);
_adapter = new GalleryPagerAdapter(this);
_pager.setAdapter(_adapter);
_pager.setOffscreenPageLimit(6); // how many images to load into memory
_closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Close clicked");
finish();
}
});
}
class GalleryPagerAdapter extends PagerAdapter {
Context _context;
LayoutInflater _inflater;
public GalleryPagerAdapter(Context context) {
_context = context;
_inflater = (LayoutInflater) _context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return _images.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((LinearLayout) object);
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
View itemView = _inflater.inflate(R.layout.pager_gallery_item, container, false);
container.addView(itemView);
// Get the border size to show around each image
int borderSize = _thumbnails.getPaddingTop();
// Get the size of the actual thumbnail image
int thumbnailSize = ((FrameLayout.LayoutParams)
_pager.getLayoutParams()).bottomMargin - (borderSize*2);
// Set the thumbnail layout parameters. Adjust as required
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(thumbnailSize, thumbnailSize);
params.setMargins(0, 0, borderSize, 0);
// You could also set like so to remove borders
//ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
// ViewGroup.LayoutParams.WRAP_CONTENT,
// ViewGroup.LayoutParams.WRAP_CONTENT);
final ImageView thumbView = new ImageView(_context);
thumbView.setScaleType(ImageView.ScaleType.CENTER_CROP);
thumbView.setLayoutParams(params);
thumbView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Thumbnail clicked");
// Set the pager position when thumbnail clicked
_pager.setCurrentItem(position);
}
});
_thumbnails.addView(thumbView);
final SubsamplingScaleImageView imageView =
(SubsamplingScaleImageView) itemView.findViewById(R.id.image);
// Asynchronously load the image and set the thumbnail and pager view
Glide.with(_context)
.load(_images.get(position))
.asBitmap()
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {
imageView.setImage(ImageSource.bitmap(bitmap));
thumbView.setImageBitmap(bitmap);
}
});
return itemView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((LinearLayout) object);
}
}
}
Полный проект Android работает на Github: https://github.com/sourcey/imagegallerydemo
Пожалуйста, выберите ответ, если у вас есть то, что вы ищете ...
Почему вы используете InjectView вместо классического findViewById? Это лучше? Спасибо. – researcher
Сеть обязательно лучше, но Java - очень подробный язык, и это помогает создавать более чистый код. – Kamo
[введите описание изображения здесь] [1]
[1]: http://i.stack.imgur.com/OCgSk.pngсильный текст
Вы можете использовать Recycler View для создания слайд вид изображения
layoutManager=new LinearLayoutManager(getApplicationContext(),LinearLayoutManager.HORIZONTAL, false);
Hor_RecylerView.setLayoutManager(layoutManager);
AlphaInAnimationAdapter alphaAdapter = new AlphaInAnimationAdapter(i);
Hor_RecylerView.getItemAnimator().setAddDuration(1000);
Hor_RecylerView.setAdapter(new SlideInLeftAnimationAdapter(alphaAdapter));
См работу demo from here
С выпуском библиотеки RecyclerView вы можете легко реализовать как горизонтальной и вертикальной ориентации списка. Это стало возможным благодаря использованию LinearLayoutManager, для которого можно задать ориентацию либо по горизонтали или по вертикали, как показано ниже ...
LinearLayoutManager horizontalLayoutManager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.HORIZONTAL, false);
Вы можете read more
- 1. Галерея изображений с горизонтальной и вертикальной прокруткой (Android)
- 2. Галерея с запертой в центре горизонтальной прокруткой
- 3. Галерея изображений с горизонтальным прокруткой
- 4. iOS: UIScrollView с горизонтальной прокруткой 2 изображений
- 5. Сетка с горизонтальной прокруткой в android
- 6. Проблема с горизонтальной прокруткой
- 7. сайт с горизонтальной прокруткой
- 8. Проблема с горизонтальной прокруткой
- 9. Переполнение с горизонтальной прокруткой
- 10. UIScrollView с пользовательской горизонтальной прокруткой
- 11. Список раскладок с горизонтальной прокруткой
- 12. Реализация ListView с горизонтальной прокруткой в Android
- 13. Android Vertical Listview с горизонтальной прокруткой сверху
- 14. Android вертикальный ListView с горизонтальной прокруткой
- 15. Галерея изображений карусели Android
- 16. Простая галерея изображений с HorizontalScrollView
- 17. Стол печати с горизонтальной прокруткой
- 18. LongListSelector с горизонтальной прокруткой - WP8
- 19. HTML-таблица с горизонтальной прокруткой
- 20. Строка бутстрапа с горизонтальной прокруткой
- 21. фоновое изображение с горизонтальной прокруткой
- 22. Таблицы головки с горизонтальной прокруткой
- 23. Исправлена ошибка с горизонтальной прокруткой
- 24. jQuery галерея мобильных изображений по умолчанию вертикальная проблема с прокруткой
- 25. Добавление изображений в UIScrollview с прокруткой горизонтальной бесконечности
- 26. Горизонтальная Галерея изображений
- 27. Горизонтальная галерея просмотра изображений
- 28. Использование колесика прокрутки с горизонтальной прокруткой
- 29. Галерея пользовательских изображений для Android
- 30. Галерея изображений Android очень медленная
Возможный дубликат [HorizontalScrollView внутри scrollView android] (http://stackoverflow.com/questions/42230711/horizontalscrollview-inside-a-scrollview-android) – Shawn