2013-07-05 2 views
6

Я пытаюсь сделать простой пример галереи изображений, используя horizontalscrollview и динамически добавляя изображения. Я искал примеры, но большинство из них слишком сложны. Есть ли простой пример того, как это сделать?Галерея изображений с горизонтальным прокруткой

+3

опубликуйте свой код, и если у вас возникнут трудности с этим, мы сможем решить проблему, мы не работаем в обоих направлениях. –

ответ

12

Here некоторые простой пример, который реализован горизонтальный вид прокрутки, чтобы выглядеть как галерею изображений

это поможет вам

Добавить HorizontalScrollView в макете:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <HorizontalScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
     <LinearLayout 
      android:id="@+id/mygallery" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      /> 
    </HorizontalScrollView> 

</LinearLayout> 

Главная Java код:

package com.example.androidhorizontalscrollviewgallery; 

import java.io.File; 

import android.os.Bundle; 
import android.os.Environment; 
import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.view.Gravity; 
import android.view.View; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

LinearLayout myGallery; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     myGallery = (LinearLayout)findViewById(R.id.mygallery); 

     String ExternalStorageDirectoryPath = Environment 
      .getExternalStorageDirectory() 
      .getAbsolutePath(); 

     String targetPath = ExternalStorageDirectoryPath + "/test/"; 

     Toast.makeText(getApplicationContext(), targetPath, Toast.LENGTH_LONG).show(); 
     File targetDirector = new File(targetPath); 

     File[] files = targetDirector.listFiles(); 
     for (File file : files){ 
     myGallery.addView(insertPhoto(file.getAbsolutePath())); 
     }  
    } 

    View insertPhoto(String path){ 
    Bitmap bm = decodeSampledBitmapFromUri(path, 220, 220); 

    LinearLayout layout = new LinearLayout(getApplicationContext()); 
    layout.setLayoutParams(new LayoutParams(250, 250)); 
    layout.setGravity(Gravity.CENTER); 

    ImageView imageView = new ImageView(getApplicationContext()); 
    imageView.setLayoutParams(new LayoutParams(220, 220)); 
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    imageView.setImageBitmap(bm); 

    layout.addView(imageView); 
    return layout; 
    } 

    public Bitmap decodeSampledBitmapFromUri(String path, int reqWidth, int reqHeight) { 
    Bitmap bm = null; 

    // First decode with inJustDecodeBounds=true to check dimensions 
    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(path, options); 

    // Calculate inSampleSize 
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 
    bm = BitmapFactory.decodeFile(path, options); 

    return bm; 
    } 

    public int calculateInSampleSize(

    BitmapFactory.Options options, int reqWidth, int reqHeight) { 
    // Raw height and width of image 
    final int height = options.outHeight; 
    final int width = options.outWidth; 
    int inSampleSize = 1; 

    if (height > reqHeight || width > reqWidth) { 
     if (width > height) { 
     inSampleSize = Math.round((float)height/(float)reqHeight); 
     } else { 
     inSampleSize = Math.round((float)width/(float)reqWidth); 
     } 
    } 

    return inSampleSize; 
    } 

} 

Примечание: в этом документе достаточно, растровые изображения в HorizontalScrollView не будут удалены даже не на экране. Итак, если слишком много растровых изображений загружено, ошибка java.lang.OutOfMemoryError будет выброшена!

+0

Можете ли вы мне помочь на этом [вопрос] (http://stackoverflow.com/questions/33219942/horitzontalscrollview-or-carrousel)? : D –

-7

Вы можете создать div и установить переполнение для скрытия, а затем вставить другое внутри него, которое имеет высоту или ширину всех изображений, зависит от вашей анимации, которую вы хотите горизонтально, идите с шириной раз на количество изображений и помните чтобы включить поля в это. Затем вы кодогенератор JQuery анимации для работы на больших DIV, который будет двигаться влево или вправо, опять же в зависимости от ваших предпочтений

eg $('pic').animate({left:'_____ <- enter width of single image together with margin here ' +'px','slow' <-- whatever speed you prefer);

, а затем играть с ним оттуда. ваш обработчик может щелкнуть по другой кнопке или на изображении ... предпочтение снова. Он очень гибкий, без особого кодирования, это не лучший вариант для использования. Если это вас не устраивает, создайте массив изображений и проведите через них, а не используйте эти конкретные размеры для прокрутки. Удачи вам в этом. Надеюсь, я помог тебе.

+3

JQuery не поможет здесь, в андроиде – roarster

Смежные вопросы