2016-07-26 4 views
3

Я делаю проект, в котором пользователь может добавить до 10 изображений. Когда пользователь нажимает кнопку «Добавить новое изображение», создается изображение. Я реализовал это в горизонтальном прокрутке изображения, чтобы пользователь мог прокручивать по горизонтали для просмотра изображений. При нажатии на изображение пользователь сможет добавлять изображение с камеры или галереи. Теперь проблема всегда заключается в том, что изображение становится настроенным на последнем изображении, даже если я щелкнул на других изображениях. Я не знаю, как установить изображение в выбранном изображении.Как добавить изображение в ImageView динамически?

Я ссылался на эту ссылку (http://sunil-android.blogspot.in/2013/03/insert-imageview-dynamically-using-java.html) для динамического создания изображения в горизонтальном прокрутке.

Ниже мой код:

При нажатии на кнопку imageviews будут добавлены динамически:

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

       addImageView(image_layout); 
     } 

});

Это функция addImageView:

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

Это код для выбора изображения из камеры или галереи:

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

показать нам ** КОД **. поэтому мы можем вам помочь. – k0sh

+0

'Я реализовал это в горизонтальном прокручиваемом изображении,'. Вы помещаете до десяти изображений в один ImageView? Я не думаю, что вы создаете новые ImageViews. Поэтому, пожалуйста, уточните. – greenapps

+0

'private void addImageView (LinearLayout layout, String image) {'. Что содержит изображение String? – greenapps

ответ

1

взять переменную класса ImageView как

ImageView addImage; 

измените свой метод щелчка следующим образом:

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

     iv_id = v.getId(); 

     addImage = (ImageView)v // added code 

     showDialog(CONTEXT_MENU_ID); 
    } 
}); 

и, наконец, в onActivityResult заменить эту строку

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

с

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

надеюсь, что вы поймете actul проблему.

+0

Большое спасибо. Это сработало для меня. – Phoenix

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

  • Нет связанных вопросов^_^