画像をタップすると拡大表示する(ダイアログ編)
ギャラリーアプリを作成する場合、画像をタップしたら拡大表示する機能をつけたいと思うはずです。
今回のサンプルは画像アイコンをタップすると、
ダイアログ表示されその中で画像が拡大表示されるというものです。
起動時の画面
タップしてダイアログが表示された画面
MainActivity.java
// レイアウトオブジェクトから拡大対象のImageViewを取得 final ImageView tapView = (ImageView)findViewById(R.id.imageView1); // 拡大対象のImageViewにタップ時のリスナーをセット tapView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ImageView imageView = new ImageView(MainActivity.this); Bitmap bitmap = ((BitmapDrawable)tapView.getDrawable()).getBitmap(); imageView.setImageBitmap(bitmap); // ディスプレイの幅を取得する(API 13以上) Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; float factor = width / bitmap.getWidth(); imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); // ダイアログを作成する Dialog dialog = new Dialog(MainActivity.this); // タイトルを非表示にする dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(imageView); dialog.getWindow().setLayout((int)(bitmap.getWidth()*factor), (int)(bitmap.getHeight()*factor)); // ダイアログを表示する dialog.show(); } });
ソースコード
package com.example.galleryviewsample; import android.os.Bundle; import android.app.Activity; import android.app.Dialog; import android.graphics.Bitmap; import android.graphics.Point; import android.graphics.drawable.BitmapDrawable; import android.view.Display; import android.view.View; import android.view.Window; import android.widget.ImageView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // レイアウトオブジェクトから拡大対象のImageViewを取得 final ImageView tapView = (ImageView)findViewById(R.id.imageView1); // 拡大対象のImageViewにタップ時のリスナーをセット tapView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ImageView imageView = new ImageView(MainActivity.this); Bitmap bitmap = ((BitmapDrawable)tapView.getDrawable()).getBitmap(); imageView.setImageBitmap(bitmap); // ディスプレイの幅を取得する(API 13以上) Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; float factor = width / bitmap.getWidth(); imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); // ダイアログを作成する Dialog dialog = new Dialog(MainActivity.this); // タイトルを非表示にする dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(imageView); dialog.getWindow().setLayout((int)(bitmap.getWidth()*factor), (int)(bitmap.getHeight()*factor)); // ダイアログを表示する dialog.show(); } }); } }
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="136dp" android:src="@drawable/ic_launcher" /> </RelativeLayout>