2015-08-20 2 views
1

Я хочу иметь горизонтальный список прокрутки, который включает некоторые изображения с их названиями. Я использую библиотеку TwoWayView (lucasr), и я не могу показать изображение. Если есть какая-либо возможность иметь изображения в этой библиотеке, пожалуйста, скажите мне, как это сделать. Но если он не поддерживает изображение, предложите мне лучшую библиотеку. Я использую android studio v1.2, и я новичок в android.Как создать горизонтальный список изображений с заголовком в android?

+2

[Проверить] (http://stackoverflow.com/questions/28460300/how-to-build -a-horizontal-listview-with-recyclerview) и [Проверить] (http://developer.android.com/intl/ru/reference/android/support/v17/leanback/widget/HorizontalGridView.html) – Skynet

+0

Использовать 'ViewPager ' –

ответ

1

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

в макете:

<HorizontalScrollView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/horizontalScrollView" 
    android:layout_above="@+id/linearLayout3" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" > 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/image_container" 
     android:orientation="horizontal"> 

    </LinearLayout> 
</HorizontalScrollView> 

В коде:

LinearLayout layout = (LinearLayout) view.findViewById(R.id.image_container) 
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 

// Add 4 images 

for (int i = 0; i < 4; i++) { 
     layoutParams.setMargins(20, 20, 20, 20); 
     layoutParams.gravity = Gravity.CENTER; 
     ImageView imageView = new ImageView(getActivity()); 
     imageView.setImageResource(R.drawable.image); 
     imageView.setOnClickListener(documentImageListener); 
     imageView.setLayoutParams(layoutParams); 

     layout.addView(imageView); 

    } 

Как я уже сказал, очень грубо, но надеюсь, что это помогает!

Edit: по пути ориентация макета должна быть «горизонтальная» андроид: ориентация = «горизонтальные»>

+0

Я думаю, что это хорошо. но getActivity() в определении ImageView не разрешен. что мне делать? –

+0

RecyclerView лучше, но – Sheychan

+0

@MohammadTahvildary вам нужно передать в контексте. если бы вы могли опубликовать некоторый код, было бы проще помочь вам –

0

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

<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> 

в OnCreate() метод, получить идентификатор LinearLayout из файла XML и добавить динамически создаваемых ImageView в LinearLayout:

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; 
    } 

} 
0

Если ваша цель - показать список изображений горизонтальным образом, вам лучше использовать Horizontal ListView. Проверьте ссылку ценам ниже

Horizontal ListView

Посмотрите, его именно то, что вы хотите изображение + текст

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