2016-04-07 3 views
0

私の質問はギャラリーから複数のイメージを選択し、各写真にImageViewsを動的に追加する方法です。私は複数の方法を試みたが、私はちょうど私の状況に合ったものを得ることができない。私は初心者なので、これをどうやって自分自身を理解することはできません。ギャラリーから複数のイメージを選択し、イメージビューですべてのイメージを表示

私は何とかので、これを変更することができます -

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    try { 
     // When an Image is picked 
     if (requestCode == PICK_IMAGE_MULTIPLE && resultCode == RESULT_OK 
       && null != data) { 
      // Get the Image from data 

      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
      imagesEncodedList = new ArrayList<String>(); 
      if(data.getData()!=null){ 

       Uri mImageUri=data.getData(); 

       // Get the cursor 
       Cursor cursor = getContentResolver().query(mImageUri, 
         filePathColumn, null, null, null); 
       // Move to first row 
       cursor.moveToFirst(); 

       int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
       imageEncoded = cursor.getString(columnIndex); 
       cursor.close(); 

      }else { 
       if (data.getClipData() != null) { 
        ClipData mClipData = data.getClipData(); 
        ArrayList<Uri> mArrayUri = new ArrayList<Uri>(); 
        for (int i = 0; i < mClipData.getItemCount(); i++) { 

         ClipData.Item item = mClipData.getItemAt(i); 
         Uri uri = item.getUri(); 
         mArrayUri.add(uri); 
         // Get the cursor 
         Cursor cursor = getContentResolver().query(uri, filePathColumn, null, null, null); 
         // Move to first row 
         cursor.moveToFirst(); 

         int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
         imageEncoded = cursor.getString(columnIndex); 
         imagesEncodedList.add(imageEncoded); 
         cursor.close(); 

        } 
        Log.v("LOG_TAG", "Selected Images" + mArrayUri.size()); 
       } 
      } 
     } else { 
      Toast.makeText(this, "You haven't picked Image", 
        Toast.LENGTH_LONG).show(); 
     } 
    } catch (Exception e) { 
     Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG) 
       .show(); 
    } 

    super.onActivityResult(requestCode, resultCode, data); 
} 

私が働いて画像選択を持っているだけで1枚の絵のために

btn=(Button)findViewById(R.id.imageButton); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(); 
      intent.setType("image/*"); 
      intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      startActivityForResult(Intent.createChooser(intent,"Select Picture"), PICK_IMAGE_MULTIPLE); 
     } 
    }); 

:私が試した何

それは複数の画像を扱うことができ、プログラム上でImageViewを追加できますか?

private static int RESULT_LOAD_IMAGE = 1; 


    btn=(Button)findViewById(R.id.imageButton); 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(i, RESULT_LOAD_IMAGE); 

       if (ContextCompat.checkSelfPermission(MainComp_News_Edit.this, 
         Manifest.permission.READ_EXTERNAL_STORAGE) 
         != PackageManager.PERMISSION_GRANTED) { 

        if (ActivityCompat.shouldShowRequestPermissionRationale(MainComp_News_Edit.this, 
          Manifest.permission.READ_EXTERNAL_STORAGE)) { 

        } else { 

         ActivityCompat.requestPermissions(MainComp_News_Edit.this, 
          new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
          MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 
        } 
       } 
      } 
     }); 

-

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    super.onActivityResult(requestCode, resultCode, data); 
    try{ 
     if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      cursor.moveToFirst(); 
      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      picturePath = cursor.getString(columnIndex); 
      cursor.close(); 

      ImageView imageView = (ImageView) findViewById(R.id.imageView); 

      imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
     } 
    } 
    catch(Exception e) { 
     e.printStackTrace(); 
    } 
} 

翻訳: SelecteerのEENの写真=写真を選択します。 Verwijder Foto =写真を削除してください。あなたは、画像のURIを取得するときに

を選択

Picture Select

+0

recylerviewまたはグリッド表示を使用して選択した画像を表示する –

+0

@YounasBangashこれを実行する方法の例がありますか?応答のためのthx – Robbert

答えて

1

呼び出し、その関数は

compile 'com.squareup.picasso:picasso:2.5.2' 
compile 'com.android.support:cardview-v7:23.1.1' 

ビルドgraddleファイルに以下の行を追加しますrecyclerView_myc

<com.pacakage.AutofitRecyclerView 
     android:id="@+id/recyclerView_myc" 
     android:layout_marginTop="3dp" 
     android:background="@color/AppBackGroundColor" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     android:layout_marginLeft="@dimen/activity_vertical_margin" 
     android:layout_marginStart="@dimen/activity_vertical_margin" 
     android:layout_marginRight="1dp" 
     android:layout_marginEnd="1dp" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/view" /> 

previewMediaInGrid機能

private ArrayList<String> mArrayUri; //uri of images you selected 
    private void previewMediaInGrid(ArrayList<String> mArrayUri) { 
      recyclerView= (AutofitRecyclerView) findViewById(R.id.recyclerView_myc); //recyclerView_myc will be autofitrecyelrview 
      recyclerView.setVisibility(View.VISIBLE); 
      vidPreview.setVisibility(View.GONE); 
      imgPreview.setVisibility(View.GONE); 
      mAdapter = new GridAdapterUpload(mArrayUri, getApplicationContext()); 
      recyclerView.setAdapter(mAdapter); 

     } 

GridAdapterUpload

public class GridAdapterUpload extends RecyclerView.Adapter<GridAdapterUpload.ViewHolder> { 
    private ArrayList<String> mItems; 
    private MyClickListener myClickListener; 
    private Context mContext; 
    private String TAG="GridAdapter"; 
    //private ProgressBar mProgressBar; 

    public GridAdapterUpload(ArrayList<String> items,Context mContext) { 
     this.mItems = items; 
     this.mContext= mContext; 

    } 
    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.galary_item, viewGroup, false); 
     return new ViewHolder(v); 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder viewHolder, final int position) { 
     viewHolder.mProgbar.setVisibility(View.VISIBLE); 
     viewHolder.mProgbar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(mContext, 
       R.color.colorButton), android.graphics.PorterDuff.Mode.MULTIPLY); 

     Picasso.with(mContext) 
       .load(new File(mItems.get(position))) 
       .into(viewHolder.imgThumbnail, new com.squareup.picasso.Callback() { 
        @Override 
        public void onSuccess() { 
         viewHolder.mProgbar.setVisibility(View.INVISIBLE); 
        } 
        @Override 
        public void onError() { 
         viewHolder.mProgbar.setVisibility(View.INVISIBLE); 
        } 
       }); 
     viewHolder.imgThumbnail.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    } 
    @Override 
    public int getItemCount() { 
     return mItems.size(); 
    } 
    class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     public ImageView imgThumbnail; 
     public ProgressBar mProgbar; 
     public ViewHolder(View itemView) { 
      super(itemView); 
      imgThumbnail = (ImageView)itemView.findViewById(R.id.img_thumbnail); 
      mProgbar = (ProgressBar) itemView.findViewById(R.id.progressBar); 
      // itemView.setOnClickListener(this); 
     } 
     public void onClick(View v) { 
      myClickListener.onItemClick(getLayoutPosition(), v); 
     } 
    } 
    public interface MyClickListener { 
     void onItemClick(int position, View v); 
    } 
    public void setOnItemClickListener(MyClickListener myClickListener) { 
     this.myClickListener = myClickListener; 
    } 


} 

gallery_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:padding="2dp" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <android.support.v7.widget.CardView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     card_view:cardCornerRadius="0dp" 
     card_view:cardElevation="0.01dp"> 
     <RelativeLayout 
      android:id="@+id/layout_root" 
      android:layout_width="match_parent" 
      android:background="@color/AppUploadCamreaPictureColor" 
      android:layout_height="100dp"> 
      <ImageView 
       android:id="@+id/img_thumbnail" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerVertical="true" 
       android:layout_centerHorizontal="true" /> 
      <ProgressBar 
       android:id="@+id/progressBar" 
       android:layout_width="25dp" 
       android:layout_height="25dp" 
       android:layout_centerHorizontal="true" 
       android:layout_centerVertical="true" 
       android:visibility="invisible"/> 

     </RelativeLayout> 
    </android.support.v7.widget.CardView> 
</LinearLayout> 

AutofitRecyclerView

public class AutofitRecyclerView extends RecyclerView { 
    private GridLayoutManager manager; 
    private int columnWidth = -1; 

    public AutofitRecyclerView(Context context) { 
    super(context); 

    init(context, null); 
    } 

    public AutofitRecyclerView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(context, attrs); 
    } 

    public AutofitRecyclerView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    init(context, attrs); 
    } 

    private void init(Context context, AttributeSet attrs) { 
    if (attrs != null) { 
     int[] attrsArray = { 
      android.R.attr.columnWidth 
     }; 
     TypedArray array = context.obtainStyledAttributes(attrs, attrsArray); 
     columnWidth = array.getDimensionPixelSize(0, -1); 
     array.recycle(); 
    } 

    manager = new GridLayoutManager(getContext(),3); 
    setLayoutManager(manager); 
    } 

    @Override 
    protected void onMeasure(int widthSpec, int heightSpec) { 
    super.onMeasure(widthSpec, heightSpec); 
    if (columnWidth > 0) { 
     int spanCount = Math.max(1, getMeasuredWidth()/columnWidth); 
     manager.setSpanCount(spanCount); 
    } 
    } 
} 
+0

実装方法とコードの実装場所に関する情報が少しありますか?再びawnserのthx! – Robbert

+0

イメージを取得した後に関数を呼び出すuri –

+0

Log.v( "LOG_TAG"、 "Selected Images" + mArrayUri.size());その行の後に関数を呼び出し、答えを受け入れるのに役立つなら、問題のコメントに直面したら、mArrayUriを渡してください –

関連する問題