ただ表示するだけなので、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>
|
【Android Studio 1の最新記事】
- Tools クラスを使って Livedoor の お天気Webサービスを呼び出して Google gson でリストビューに一括で投入するとこうなります
- Android の ListView で ArrayAdapter をカスタマイズして表示する時、リストビューのアイテム内にボタン等がある場合のイベント登録時の注意事項
- できる限り不必要な記述は省いて simple_list_item_2 を使った 自前クラスを扱う専用 ArrayAdapter(private) でリストビューの表示
- できるだけ難しい事をせずに、Android のリストビューでタイトルをクリックしたらそのページを表示する( 自前のオブジェクトを ArrayAdapter にセットする )
- インターネットからアイコン画像を取得してリストビューを表示する
- Android の AlertDialog を使いやすくする MessageBox クラス
- できるだけ難しい事をせずに、Android のリストビューでタイトルをクリックしたらそのページを表示する
- Android の単純な ListView の ArrayAdapter による応用の効く 4バリエーション と複数項目に即対応できる SimpleAdapter による実装
- Storage Access Framework のガイドラインに基づく、Android 4.4 とそれ以降における 画像参照
- Android Studio : GET(POST)メソッドで呼び出す際に、PHP 側のセッションを有効にする為に CookieManager を static で使用する
- Android Studio で AsyncTask / Android Studio ならではの操作でコードを楽々作成
- Android Studio : 現在の時間を ライフサイクルのアクティブな時に処理される onStart で表示する( 5.1.1 )
- Android Studio でボタンをクリックして トースト(Toast) を表示する / onClick プロパティと Button へのイベント登録( Listener )
- Google スプレッドシートで、Android Studio の重要な操作のまとめ
- Android Studio で com.example. lightbox. myapplication を jp.winofsql. lightbox. threeButton に変更
- ショートカットキーを使って、Android Studio のコード記述を極限まで楽にする
- Android Studio の 『CTRL + SHIFT + I』(定義の参照) を中心に、少しでも時間短縮
- Android Strudio で行われている『スペルチェック』をオフにする( Typo: In word '.....' という表示 )
- Android Studio と Pleiades Eclipse + Android SDK が参照する Java SE ドキュメントを日本語化する