ギャラリーからインテントで画像を受け取って表示するテスト


2014年4月26日現在、私が理解している内容です。
間違っている場合があります。


暗黙的インテントでギャラリーを呼び出し、選択された画像を表示する

「GALLERY」ボタンを押すと、ギャラリーが呼び出される。
選択した画像をインテントで受け取り、表示する。

  


暗黙的インテントで画像を指定し、外部のビュワーに渡すテスト」のコードを修正。

画像表示用ビューをレイアウトに追加。

view1 = new ImageView(this); layout1.addView(view1);


インテントからデータを受け取り、画像をロードする。

InputStream stream = getContentResolver().openInputStream(intent.getData()); Bitmap bmp = BitmapFactory.decodeStream(stream); stream.close(); view1.setImageBitmap(bmp);


MainActivity.java

package com.example.test27; import java.io.InputStream; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Toast; public class MainActivity extends Activity { static final int MY_INTENT_GALLERY = 1; ImageView view1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //レイアウトを作ってボタンを並べる LinearLayout layout1 = new LinearLayout(this); layout1.setOrientation(LinearLayout.VERTICAL); //縦に並べる setContentView(layout1); //---------------------- //ボタン Button button1 = new Button(this); button1.setText("GALLERY"); layout1.addView(button1); //----------------------- //表示用ビュー view1 = new ImageView(this); view1.setBackgroundColor(Color.argb(255, 255, 0, 0)); view1.setImageResource(R.drawable.ic_launcher); //view1.setScaleType(ImageView.ScaleType.FIT_XY); //縦横をビューに合わせる LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(240,400); //この大きさで表示 view1.setLayoutParams(params1); //ビューにパラメータをセット layout1.addView(view1); //----------------------- button1.setOnClickListener( new OnClickListener(){ @Override public void onClick(View v) { //ギャラリー Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivityForResult(intent,MY_INTENT_GALLERY ); } }); } public void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); //受け渡し結果の戻り値 if (requestCode == MY_INTENT_GALLERY) { if (resultCode == RESULT_OK) { //受け渡し成功 //Uri uri = intent.getData(); String pathname = intent.getData().getPath(); //String pathname = intent.getData().getLastPathSegment(); Toast.makeText(MainActivity.this , pathname,Toast.LENGTH_LONG).show(); try { //画像表示 InputStream stream = getContentResolver().openInputStream(intent.getData()); Bitmap bmp = BitmapFactory.decodeStream(stream); stream.close(); view1.setImageBitmap(bmp); } catch (Exception e) { } } else if (resultCode == RESULT_CANCELED) { //キャンセルされた Toast.makeText(MainActivity.this , "CANCEL",Toast.LENGTH_LONG).show(); } } } }






画像を、全画面で表示する

全画面で表示するために、ステータスバーと、タイトルバー、ボタンを消す必要があります。



タイトルバーの非表示は、アクティビティの「setContentView()」の前にしかできないようです。
以下の命令を、通常のActivityの場合、「super.onCreate(savedInstanceState)」の後で指定。
PreferenceActivityの場合、「super.onCreate(savedInstanceState)」の前で指定。

全画面表示用の別のアクティビティか、フラグメントを用意すれば、
アプリの途中からでもタイトルバーの非表示ができるでしょう。

//タイトルバー非表示 requestWindowFeature(Window.FEATURE_NO_TITLE);


ステータスバーの表示、非表示。

//ステータスバーを消す getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //ステータスバーを出す getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);


ボタンを消す。

//ボタン消す layout1.removeView(button1);


画像の全画面表示のため、ビットマップのサイズを取得して、ビューの大きさを動的に再設定する。

//ビットマップのサイズ取得 int width = bmp.getWidth(); int height = bmp.getHeight(); //ビューのサイズを動的に変更 view1.setLayoutParams(new LinearLayout.LayoutParams(width, height));


画像が全画面表示されたら、その後の操作のために、端末の「戻るキー」の動作を変更する。
「戻るキー」で、ステータスバーを出し、ボタンを出し、ビューのサイズを小さくする。
全画面表示中でないときに、「戻るキー」が押されたら、アプリを終了する。
全画面表示中かどうか、「GalleryFlg1」でチェックする。

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK){ if(GalleryFlg1==1){ GalleryFlg1=0; //ビューを消す layout1.removeView(view1); //ステータスバー出す getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //ボタン出す layout1.addView(button1); //ビューサイズ動的変更 view1.setLayoutParams(new LinearLayout.LayoutParams(240, 400)); //ビュー出す layout1.addView(view1); } else{ //終わる finish(); } return true; } return false; }

端末の「戻るキー」で、全画面表示終了。
もう一度、「戻るキー」でアプリ終了。


MainActivity.java

package com.example.test28; import java.io.InputStream; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Toast; public class MainActivity extends Activity { static final int MY_INTENT_GALLERY = 1; ImageView view1; LinearLayout layout1; Button button1; int GalleryFlg1=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //タイトルバー非表示 requestWindowFeature(Window.FEATURE_NO_TITLE); //レイアウトを作ってボタンを並べる layout1 = new LinearLayout(this); layout1.setOrientation(LinearLayout.VERTICAL); //縦に並べる setContentView(layout1); //---------------------- //ボタン button1 = new Button(this); button1.setText("GALLERY"); layout1.addView(button1); //----------------------- //表示用ビュー view1 = new ImageView(this); view1.setBackgroundColor(Color.argb(255, 255, 0, 0)); view1.setImageResource(R.drawable.ic_launcher); //view1.setScaleType(ImageView.ScaleType.FIT_XY); //縦横をビューに合わせる LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(240,400); //この大きさで表示 view1.setLayoutParams(params1); //ビューにパラメータをセット layout1.addView(view1); //----------------------- button1.setOnClickListener( new OnClickListener(){ @Override public void onClick(View v) { //ギャラリー Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivityForResult(intent,MY_INTENT_GALLERY ); } }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK){ if(GalleryFlg1==1){ GalleryFlg1=0; //ビューを消す layout1.removeView(view1); //ステータスバー出す getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //ボタン出す layout1.addView(button1); //ビューサイズ動的変更 view1.setLayoutParams(new LinearLayout.LayoutParams(240, 400)); //ビュー出す layout1.addView(view1); } else{ //終わる finish(); } return true; } return false; } public void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); //受け渡し結果の戻り値 if (requestCode == MY_INTENT_GALLERY) { if (resultCode == RESULT_OK) { //受け渡し成功 //Uri uri = intent.getData(); String pathname = intent.getData().getPath(); //String pathname = intent.getData().getLastPathSegment(); Toast.makeText(MainActivity.this , pathname,Toast.LENGTH_LONG).show(); PutImage1(intent); } else if (resultCode == RESULT_CANCELED) { //キャンセルされた Toast.makeText(MainActivity.this , "CANCEL",Toast.LENGTH_LONG).show(); } } } public void PutImage1(Intent intent){ try { //画像表示 InputStream stream = getContentResolver().openInputStream(intent.getData()); Bitmap bmp = BitmapFactory.decodeStream(stream); stream.close(); //サイズ取得 int width = bmp.getWidth(); int height = bmp.getHeight(); //ビューサイズ動的変更 view1.setLayoutParams(new LinearLayout.LayoutParams(width, height)); view1.setImageBitmap(bmp); //全画面表示 GalleryFlg1=1; //ステータスバー消す getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //タイトルバー消す//ここで消すとエラー? //requestWindowFeature(Window.FEATURE_NO_TITLE); //ボタン消す layout1.removeView(button1); } catch (Exception e) { } } }


端末の画面を回転させると、初期状態に戻りますので、適当に対応しましょう。















戻る