2017-04-20 15 views
-1

私は知っているが、このような投稿はたくさんあるが、私はちょっと特別だ。Android - ImageView/ImageButtonの画像がギャラリーやカメラから

問題の説明:

私がイメージソース、カメラやギャラリーを選択するための小さなダイアログを示しパブリッククラスをしたいです。選択すると、ImageViewに画像が表示され、画像はアプリフォルダに保存されます。このクラスは多くのアクティビティから呼び出されます。だから、私はこのコードを持っている:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.CAMERA" /> 

その他のactivitesは、このようなImageViewのかのImageButtonを持っている:

PhotoActivity.javaを私はマニフェストファイルに追加する必要があり

package com.app.test; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.provider.MediaStore; 

import java.util.ArrayList; 
import java.util.List; 


public class PhotoActivity { 

    private Context context; 

    public PhotoActivity(Context current){ 
     this.context = current; 
    } 
    //this will be called from other activities 
    public void Change_Photo(final Activity a) { 

     List<String> options = new ArrayList<String>(); 
     options.add(context.getResources().getString(R.string.camera)); 
     options.add(context.getResources().getString(R.string.gallery)); 
     options.add(context.getResources().getString(R.string.cancel)); 

     //Create sequence of items 
     final CharSequence[] Sources = options.toArray(new String[options.size()]); 
     AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context); 
     dialogBuilder.setTitle(context.getResources().getString(R.string.select_image_source)); 
     dialogBuilder.setItems(Sources, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int item) { 
       if (item==0) {//camera 
        Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
        a.startActivityForResult(takePicture, 0);//zero can be replaced with any action code 
       }else if (item == 1) {//gallery 
        Intent pickPhoto = new Intent(Intent.ACTION_PICK, 
          android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
        a.startActivityForResult(pickPhoto , 1);//one can be replaced with any action code 
       } 
      } 
     }); 
     //Create alert dialog object via builder 
     AlertDialog alertDialogObject = dialogBuilder.create(); 
     //Show the dialog 
     alertDialogObject.show(); 
    } 
} 

<ImageButton 
     android:id="@+id/btn_picture" 
     android:layout_width="140dp" 
     android:layout_height="140dp" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="false" 
     android:elevation="0dp" 
     android:gravity="center_horizontal" 
     android:src="@drawable/camera" /> 

最初にカメラ画像がありますが、どのように最後に選択された画像。

選択または撮影した写真をこのImageButtonに表示するには、次に行う必要があることはありますか?

答えて

0
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
super.onActivityResult(requestCode, resultCode, data); 
Uri uri = data.getData(); 
try { 
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 
// imageButton where you want to set image 
imageButton.setImageBitmap(bitmap); 
} catch(IOException e) { 
e.printStackTrace(); 
} 
} 

これは、選択/キャプチャしたイメージをImageButtonで設定する方法です。

希望すると、これが役立ちます。

+1

'getBitmap()'や 'setImageBitmap()'よりも良い選択肢は、Picassoのような[画像読み込みライブラリ](https://android-arsenal.com/tag/46)です。答えに表示されたコードは、メインのアプリケーションスレッドにイメージをロードし、UIをフリーズします。 – CommonsWare

+0

これは仕事をしました。小さな質問。新しい写真を撮ると、ImageButtonは90度左に回転したことを示します。どうして? –

+0

これは写真のサイズによって異なりますが、小さな写真を撮ってもう一度やり直してください –

関連する問題