2016-07-26 9 views
3

Ich mache ein Projekt, in dem Benutzer bis zu 10 Bilder hinzufügen können. Wenn der Benutzer auf "Neues Bild hinzufügen" klickt, wird eine Bildansicht erstellt. Ich habe dies in einer horizontal scrollenden Bildansicht implementiert, so dass der Benutzer horizontal scrollen kann, um die Bilder anzusehen. Wenn Sie auf ein Bild klicken, kann der Benutzer ein Bild von der Kamera oder Galerie hinzufügen. Jetzt ist das Problem immer das Bild wird auf der letzten Bildansicht eingestellt, obwohl ich auf andere Bildansichten geklickt habe. Ich weiß nicht, wie ich das Bild in der ausgewählten Bildansicht einstellen soll.Wie fügt man Image zu ImageView dynamisch hinzu?

Ich habe diese (http://sunil-android.blogspot.in/2013/03/insert-imageview-dynamically-using-java.html) Link für die dynamische Erstellung von Bildansicht in horizontaler Scrollview verwiesen.

Im Anschluss ist mein Code:

On auf die Schaltfläche imageviews klicken, wird dynamisch hinzugefügt werden:

btn_upload.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

       addImageView(image_layout); 
     } 

});

Dies ist die addImageView Funktion:

private void addImageView(LinearLayout layout) { 

    imageView = new ImageView(this); 
    imageView.setImageResource(R.drawable.gallery); 
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(220, 220); 
    imageView.setLayoutParams(layoutParams); 
    imageView.setPadding(0, 0, 10, 0); 
    imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
    imageView.setId(temp); 
    layout.addView(imageView); 

    imageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      iv_id = v.getId(); 

      showDialog(CONTEXT_MENU_ID); 
     } 
    }); 
} 

Dies ist der Code Bild von der Kamera oder eine Galerie zur Auswahl:

protected Dialog onCreateDialog(int id) { 

    if (id == CONTEXT_MENU_ID) { 
     return iconContextMenu.createMenu(); 
    } 
    return super.onCreateDialog(id); 
} 

@SuppressWarnings("deprecation") 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (resultCode != RESULT_OK) 
     return; 

    switch (requestCode) { 
     case PICK_FROM_CAMERA: 
      doCrop(); 

      break; 

     case PICK_FROM_FILE: 
      mImageCaptureUri = data.getData(); 
      doCrop(); 

      break; 

     case CROP_FROM_CAMERA: 
      Bundle extras = data.getExtras(); 

      if (extras != null) { 
       SelectedImage = extras.getParcelable("data"); 

       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
       SelectedImage.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
       imageData = baos.toByteArray(); 
       image = Base64.encodeBytes(imageData); 
       filename = "img_" + System.currentTimeMillis(); 

       imageView.setImageBitmap(SelectedImage); //setting the image 

      } else { 
       image = ""; 
      } 

      File f = new File(mImageCaptureUri.getPath()); 

      if (f.exists()) 
       f.delete(); 

      break; 
    } 
} 

private void doCrop() { 

    final ArrayList<CropOption> cropOptions = new ArrayList<CropOption>(); 

    Intent intent = new Intent("com.android.camera.action.CROP"); 
    intent.setType("image/*"); 

    List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0); 

    int size = list.size(); 

    if (size == 0) { 
     Toast.makeText(this, "Cannot find image cropping application", Toast.LENGTH_SHORT).show(); 

     return; 
    } else { 
     intent.setData(mImageCaptureUri); 

     intent.putExtra("outputX", 200); 
     intent.putExtra("outputY", 200); 
     intent.putExtra("aspectX", 1); 
     intent.putExtra("aspectY", 1); 
     intent.putExtra("scale", true); 
     intent.putExtra("return-data", true); 

     if (size == 1) { 

      Intent i = new Intent(intent); 
      ResolveInfo res = list.get(0); 
      i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 
      startActivityForResult(i, CROP_FROM_CAMERA); 

     } else { 
      for (ResolveInfo res : list) { 

       final CropOption co = new CropOption(); 
       co.title = getPackageManager().getApplicationLabel(res.activityInfo.applicationInfo); 
       co.icon = getPackageManager().getApplicationIcon(res.activityInfo.applicationInfo); 
       co.appIntent = new Intent(intent); 
       co.appIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 
       cropOptions.add(co); 
      } 

      CropOptionAdapter adapter = new CropOptionAdapter(getApplicationContext(), cropOptions); 

      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle("Choose Crop App"); 
      builder.setAdapter(adapter, 
        new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int item) { 
          startActivityForResult(
            cropOptions.get(item).appIntent, 
            CROP_FROM_CAMERA); 
         } 
        }); 

      builder.setOnCancelListener(new DialogInterface.OnCancelListener() { 
       @Override 
       public void onCancel(DialogInterface dialog) { 

        if (mImageCaptureUri != null) { 
         getContentResolver().delete(mImageCaptureUri, null, null); 
         mImageCaptureUri = null; 
        } 
       } 
      }); 

      AlertDialog alert = builder.create(); 
      alert.show(); 
     } 
    } 
} 
+2

zeigen Sie uns den ** CODE **. damit wir dir helfen können. – k0sh

+0

'Ich habe dies in einer horizontal scrollenden Bildansicht implementiert,'. Platzieren Sie in einem ImageView bis zu zehn Bilder? Nein, ich denke, Sie erstellen neue ImageViews. Also bitte klar. – greenapps

+0

'private void addImageView (Layout LinearLayout, String image) {'. Was enthält das String-Bild? – greenapps

Antwort

1

nehmen eine Klassenvariable ImageView wie

ImageView addImage; 

Ändern Sie Ihre Klick-Methode wie folgt

imageView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     iv_id = v.getId(); 

     addImage = (ImageView)v // added code 

     showDialog(CONTEXT_MENU_ID); 
    } 
}); 

und schließlich in onActivityResult ersetzen Sie diese Zeile

imageView.setImageBitmap(SelectedImage); //setting the image 

mit

addImage.setImageBitmap(SelectedImage); //setting the image 

hoffen, dass Sie das actul Problem verstehen.

+0

Vielen Dank. Es hat für mich funktioniert. – Phoenix

Verwandte Themen