Please Enable JavaScript!
Gon[ Enable JavaScript ]

안드로이드(Android) 이미지뷰에서 Exif 정보 다이얼로그 띄우기

안드로이드 개발

안드로이드(Android) 이미지뷰에서 Exif 정보 다이얼로그 띄우기

 

개발환경 : window 7 64bit, Eclipse Mars, Android 4.2.2

 

이번예제는 파일브라우저에서 이미지를 선택하면 상세

페이지가 나오는 예제에서 이미지 클릭시 Exif 정보를

다이얼로그로 만들어 보여주는 예제 입니다.

 

 

파일 브라우저에서 jpg 이미지를 클릭했을 때

보여주는 클래스에 다이얼로그를 띄우는 소스

입니다.

먼저 이미지를 클릭했을 때 다이올로그를 호출할수

있도록 onClickListener 등록합니다.

 

View.OnClickListener popupDlgOnClickListener = new View.OnClickListener() {
	public void onClick(View v) {
		createdDialog(ID_JPGDIALOG).show(); // Instead of showDialog(0);
	}
};

 

onClickListener 에서 호출하는 함수 createDialog()

다음과 같습니다. 다이얼로그 내부는 dialog_select_image_view.xml

로 레이아웃을 구성하며 OK 버튼을 클릭했을 때

화면을 닫을수 있도록 onClickListener 에 등록합니다.

 

protected Dialog createdDialog(int id) {
	dlg = null;
	TextView content;

	switch (id) {
	case ID_JPGDIALOG:

		Context mContext = this;
		dlg = new Dialog(mContext);

		dlg.setContentView(R.layout.dialog_select_image_view);
		content = (TextView) dlg.findViewById(R.id.dlgImageName);
		content.setText(exifAttribute);
		
		Button okDialogButton = (Button) dlg.findViewById(R.id.btnOk);
		okDialogButton.setOnClickListener(okDialogButtonOnClickListener);

		break;
	default:
		break;
	}
	return dlg;
}

 

다이얼로그 레이아웃 xml 전체 내용입니다.

다양하게 꾸밀려면 여기에 수정을 하시면 되겠죠

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/dlgImageName"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="top" />

    <Button
        android:id="@+id/btnOk"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="OK" />

</LinearLayout>

 

다이얼로그에 등록한 OK 버튼 클릭시 상자를 닫기

위해 OnClickListener dlg.dismiss() 호출하였습니다.

 

private Button.OnClickListener okDialogButtonOnClickListener = 
		new Button.OnClickListener() {
	public void onClick(View v) {
		dlg.dismiss();
	}
};

 

이상 Exif 를 보여주기위한 이미지 상세 페이지에

대한 전체 activity 소스 입니다.

 

import java.io.IOException;

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.ExifInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class SelectImageView extends Activity {

	private static final int ID_JPGDIALOG = 0;
	private String exifAttribute;
	private Dialog dlg;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_select_image_view);

		TextView txtImgName = (TextView) findViewById(R.id.jpgname);
		ImageView jpgView = (ImageView) findViewById(R.id.jpgview);
		jpgView.setOnClickListener(popupDlgOnClickListener);

		Intent intent = getIntent();
		if (intent != null) {
			String path = intent.getStringExtra("totalpath");
			txtImgName.setText(path);

			BitmapFactory.Options options = new BitmapFactory.Options();
			options.inSampleSize = 2;
			Bitmap bm = BitmapFactory.decodeFile(path, options);
			jpgView.setImageBitmap(bm);
			
			try {
				ExifInterface exif = new ExifInterface(path);
				exifAttribute = getExif(exif);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	View.OnClickListener popupDlgOnClickListener = new View.OnClickListener() {
		public void onClick(View v) {
			createdDialog(ID_JPGDIALOG).show(); // Instead of showDialog(0);
		}
	};

	protected Dialog createdDialog(int id) {
		dlg = null;
		TextView content;

		switch (id) {
		case ID_JPGDIALOG:

			Context mContext = this;
			dlg = new Dialog(mContext);

			dlg.setContentView(R.layout.dialog_select_image_view);
			content = (TextView) dlg.findViewById(R.id.dlgImageName);
			content.setText(exifAttribute);
			
			Button okDialogButton = (Button) dlg.findViewById(R.id.btnOk);
			okDialogButton.setOnClickListener(okDialogButtonOnClickListener);

			break;
		default:
			break;
		}
		return dlg;
	}

	private Button.OnClickListener okDialogButtonOnClickListener = 
			new Button.OnClickListener() {
		public void onClick(View v) {
			dlg.dismiss();
		}
	};

	private String getExif(ExifInterface exif) {
		String myAttribute = "";
		myAttribute += getTagString(ExifInterface.TAG_DATETIME, exif);
		myAttribute += getTagString(ExifInterface.TAG_FLASH, exif);
		myAttribute += getTagString(ExifInterface.TAG_GPS_LATITUDE, exif);
		myAttribute += getTagString(ExifInterface.TAG_GPS_LATITUDE_REF, exif);
		myAttribute += getTagString(ExifInterface.TAG_GPS_LONGITUDE, exif);
		myAttribute += getTagString(ExifInterface.TAG_GPS_LONGITUDE_REF, exif);
		myAttribute += getTagString(ExifInterface.TAG_IMAGE_LENGTH, exif);
		myAttribute += getTagString(ExifInterface.TAG_IMAGE_WIDTH, exif);
		myAttribute += getTagString(ExifInterface.TAG_MAKE, exif);
		myAttribute += getTagString(ExifInterface.TAG_MODEL, exif);
		myAttribute += getTagString(ExifInterface.TAG_ORIENTATION, exif);
		myAttribute += getTagString(ExifInterface.TAG_WHITE_BALANCE, exif);
		return myAttribute;
	}

	private String getTagString(String tag, ExifInterface exif) {
		return (tag + " : " + exif.getAttribute(tag) + "\n");
	}
}

 

안드로이드(Android) 이미지뷰에서 Exif 정보 다이얼로그 띄우기

 

Posted by 녹두장군

댓글을 달아 주세요

  1. 2016.09.28 22:49  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다