2017-03-29 39 views
1

私の問題は次のとおりです。 これは、以前の画像UriをキャッシュしようとするImageButtonのOnclcickの回避策です。 NULLを渡すと効果的にリセットされます。ImageButton.setImageURI(uri)が機能しません

private ImageButton mImageSelect; 
private static final int GALLERY_REQUEST =1; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_post); 

    mImageSelect=(ImageButton) findViewById(R.id.imageselect); 
    mImageSelect.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent galleryIntent= new Intent(Intent.ACTION_GET_CONTENT); 
      galleryIntent.setType("image/*"); 
      startActivityForResult(galleryIntent, GALLERY_REQUEST); 
     } 
    }); 

} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // super.onActivityResult(requestCode, resultCode, data); 

    if(requestCode== GALLERY_REQUEST && resultCode==RESULT_OK){ 
     Uri selectedImageUri=data.getData(); 
     if (null != selectedImageUri) { 

      mImageSelect.setImageURI(selectedImageUri); 
      Toast.makeText(PostActivity.this, "Image Selected", Toast.LENGTH_SHORT).show(); 
     } 
     else{ 
      Toast.makeText(PostActivity.this,"Image Not Selected",Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 
+0

を追加しますか? –

+0

あなたはそのような画像を直接設定することはできません – g7pro

+0

マイクギャラリーからImageButtonに画像を設定する方法を尋ねます。しかし、setImageUriは機能しません。 –

答えて

0

これは、以前のイメージウリをキャッシュしようとするのImageButtonを、リフレッシュするための回避策です。この

Uri imgUri=Uri.parse("android.resource://my.package.name/"+R.drawable.image); 
mImageSelect.setImageURI(null); 
mImageSelect.setImageURI(imgUri); 

を試してみてください。 NULLを渡すと効果的にリセットされます。

+0

ありがとう、しかし、私はすでにこれを試していますが、setimageUriは動作しません –

0

Imagebutton.setImageURI(URI)は

があなたのbuild.gradle

compile 'com.github.bumptech.glide:glide.3.7.0' 

ロードにこれを追加

は、あなたがより簡単に画像をロードするためにグライドを使用することができます動作しません。グライドを使用した画像URIは次のとおりです。

Glide.with(MainActivity.this).load(uri).into(imageView); 
0

URIからビットマップを作成し、イメージボタンにビットマップを設定してみてください

mImageSelect.setImageURI(Uri.parse(data.getData()); 
0

を試してみてください。ある、getPath()のための

String path = getPath(this,uri); 

コード: これはと行うことができます

public static String getPath(final Context context, final Uri uri) { 
    Utils.context = context; 
    Utils.uri = uri; 

    final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; 

    // DocumentProvider 
    if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { 
     // ExternalStorageProvider 
     if (isExternalStorageDocument(uri)) { 
      final String docId = DocumentsContract.getDocumentId(uri); 
      final String[] split = docId.split(":"); 
      final String type = split[0]; 

      if ("primary".equalsIgnoreCase(type)) { 
       return Environment.getExternalStorageDirectory() + "/" + split[1]; 
      } 

      // TODO handle non-primary volumes 
     } 
     // DownloadsProvider 
     else if (isDownloadsDocument(uri)) { 

      final String id = DocumentsContract.getDocumentId(uri); 
      final Uri contentUri = ContentUris.withAppendedId(
        Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); 

      return getDataColumn(context, contentUri, null, null); 
     } 
     // MediaProvider 
     else if (isMediaDocument(uri)) { 
      final String docId = DocumentsContract.getDocumentId(uri); 
      final String[] split = docId.split(":"); 
      final String type = split[0]; 

      Uri contentUri = null; 
      if ("image".equals(type)) { 
       contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
      } else if ("video".equals(type)) { 
       contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; 
      } else if ("audio".equals(type)) { 
       contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
      } 

      final String selection = "_id=?"; 
      final String[] selectionArgs = new String[] { 
        split[1] 
      }; 

      return getDataColumn(context, contentUri, selection, selectionArgs); 
     } 
    } 
    // MediaStore (and general) 
    else if ("content".equalsIgnoreCase(uri.getScheme())) { 

     // Return the remote address 
     if (isGooglePhotosUri(uri)) 
      return uri.getLastPathSegment(); 

     return getDataColumn(context, uri, null, null); 
    } 
    // File 
    else if ("file".equalsIgnoreCase(uri.getScheme())) { 
     return uri.getPath(); 
    } 

    return null; 
} 

今すぐとしてビットマップを得ることができますようIMAGEBUTTONに

if(path!=null) 
     Bitmap bm = getBitmapFromPath(path) 

セットのイメージ:

ImageButton.setImageBitmap(bm); 
0

fileUriは準備完了です。setImageUri()はイメージの設定を保証しません。ので、常にその画像を扱うときにサードパーティ製のライブラリを使用することをお勧めします。 setImageUri()の代わりに を使用する場合は、Picassoライブラリを使用してください。

Picasso.with(MainActivity.this).load(fileUri).into(mImageView) 

あなたは正確に、何を求めている依存として

compile 'com.squareup.picasso:picasso:2.5.2' 
関連する問題