SQLの窓

2015年06月01日


Android Studio : インターネット上の画像を取得して、Bitmap か Drawable で ImageView に表示する



ただ表示するだけなので、Bitmap も Drawable もあまり違いはありませんが、ただ読みたい場合は Drawable のほうが簡潔です。(Bitmap の場合は書く事が多いぶん、メタデータのみを取得する事ができますね)

MainActivity
package app.lightbox.winofsql.jp.storageaccess;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.InputStream;
import java.net.URL;


public class MainActivity extends Activity {

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

		// ボタンのイベント
		Button button = (Button) this.findViewById(R.id.button);
		button.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				new AsyncTask<String, Void, Bitmap>() {

					// 非同期処理
					@Override
					protected Bitmap doInBackground(String... params) {
						Bitmap image = null;
						BitmapFactory.Options options;
						try {
							// インターネット上の画像を取得して、Bitmap に変換
							URL url = new URL(params[0]);
							options = new BitmapFactory.Options();
							// 実際に読み込む
							options.inJustDecodeBounds = false;
							InputStream is = (InputStream) url.getContent();
							image = BitmapFactory.decodeStream(is, null, options);
							is.close();
						} catch (Exception e) {
							Log.i("button", e.getMessage());
						}
						return image;
					}

					// UI スレッド処理
					@Override
					protected void onPostExecute(Bitmap image) {
						super.onPostExecute(image);

						// Bitmap 取得に成功している場合は表示します
						if (image != null) {
							ImageView imageView = (ImageView) MainActivity.this.findViewById(R.id.imageView);
							imageView.setImageBitmap(image);
						}

					}
				}.execute("https://goo.gl/fc07Q6");		// JPEG 画像の 短縮 URL
			}
		});

		// ボタンのイベント
		Button button2 = (Button) this.findViewById(R.id.button2);
		button2.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				new AsyncTask<String, Void, Drawable>() {

					// 非同期処理
					@Override
					protected Drawable doInBackground(String... params) {
						Drawable image = null;
						try {
							// インターネット上の画像を取得して、Drawable に変換
							URL url = new URL( params[0] );
							InputStream is = (InputStream)url.getContent();
							image = Drawable.createFromStream(is, "");
							is.close();
						}
						catch(Exception e) {
							Log.i("button", e.getMessage());
						}
						return image;
					}

					// UI スレッド処理
					@Override
					protected void onPostExecute(Drawable image) {
						super.onPostExecute(image);

						// Bitmap 取得に成功している場合は表示します
						if (image != null) {
							ImageView imageView = (ImageView) MainActivity.this.findViewById(R.id.imageView);
							imageView.setImageDrawable(image);
						}

					}
				}.execute("https://goo.gl/WNzpRl");	// JPEG 画像の 短縮 URL
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.menu_main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();

		if (id == R.id.action_settings) {
			return true;
		}

		return super.onOptionsItemSelected(item);
	}
}


画面定義
<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:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                android:paddingBottom="@dimen/activity_vertical_margin"
                tools:context=".MainActivity">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:id="@+id/linearLayout">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Bitmap"
            android:id="@+id/button"
            android:layout_alignParentTop="true"
            android:layout_alignParentStart="true"
            android:layout_weight="1"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Drawable"
            android:id="@+id/button2"
            android:layout_alignParentTop="true"
            android:layout_weight="1"/>

    </LinearLayout>

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/imageView"
        android:layout_below="@+id/linearLayout"
        android:layout_alignParentStart="true"
        android:scaleType="fitStart"/>


</RelativeLayout>




【1 Android Studioの最新記事】
posted by lightbox at 2015-06-01 22:11 | 1 Android Studio | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり