Android開発してて思った

Android開発をしていて思ったことを書いていきます

画像をタップすると拡大表示する(ダイアログ編)

ギャラリーアプリを作成する場合、画像をタップしたら拡大表示する機能をつけたいと思うはずです。
今回のサンプルは画像アイコンをタップすると、
ダイアログ表示されその中で画像が拡大表示されるというものです。

起動時の画面
f:id:rikisha-blog:20140421145425p:plain

タップしてダイアログが表示された画面
f:id:rikisha-blog:20140421145431p:plain

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>