2013年9月9日月曜日

Volleyを使ってみる(ImageRequest編)

今回は、Volleyを使って画像を取得したいと思います(`・ω・´)シャキーン
画像を扱う方法として次の2種類があるみたいです。

・ImageViewを利用する方法
・ImageViewの拡張のNetworkImageViewを利用する方法

まずImageViewを利用した方法で行いたいと思います。
基本的には、前回のImageStringと殆ど同じ流れになります

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.volleyexample2"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />

    <!-- インターネットへのアクセスを許可 -->
    <uses-permission android:name="android.permission.INTERNET"/>    
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.volleyexample2.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
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/image"
  android:layout_width="wrap_content"   
  android:layout_height="wrap_content">
 </ImageView>

</RelativeLayout>
MainActivity.java
package com.example.volleyexample2;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.view.Menu;
import android.widget.ImageView;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.Volley;

public class MainActivity extends Activity {

 //ログ出力時のタグ名
 private static final String TAG_LOG = "Log";
 //Volleyでリクエスト時に設定するタグ名。キャンセル時に利用する。
 private static final Object TAG_REQUEST_QUEUE = new Object();
 //画像のURL
 private static final String REQUEST_URL_IMAGE = "画像URL";
 //RequestQueueのインスタンス用
 private RequestQueue mRequestQueue;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  //RequestQueueのインスタンス用を取得
  mRequestQueue = Volley.newRequestQueue(getApplicationContext());  

 }
 /*
  * onCreateの後に呼び出される。
  */
 @Override
 public void onStart(){
  super.onStart();
  //
  requestImage();
 }
 
 /*
  * アプリが見えなくなったときに呼び出される。
  * (他のアプリを立ち上げたりした時など)
  */
 @Override
 public void onStop(){
  super.onStop();
  mRequestQueue.cancelAll(TAG_REQUEST_QUEUE);
 }
 
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }
 /*
  * HTTPリクエストを投げる(画像を取得する)
  */
 private void requestImage(){
  
  //ImageView を取得する
  final ImageView image = (ImageView)findViewById(R.id.image);

  //
  ImageRequest request = new ImageRequest(
   //URL
   REQUEST_URL_IMAGE,
   //レスポンス結果リスナー
   new Listener<Bitmap>() {
    @Override
    public void onResponse(Bitmap bm) {
     image.setImageBitmap(bm);
    }
   },
   //最大の幅。指定無しは0
   0, 
   //最大の高さ。指定無しは0
   0, 
   //デコードするフォーマット
   Config.ARGB_8888,
   //エラー時のリスナー(無視する場合にはnull)
   new ErrorListener() {
    public void onErrorResponse(VolleyError e) {
     e.printStackTrace();
    }
   }
  );
  
  //タグを設定する
  request.setTag(TAG_REQUEST_QUEUE);
  
  //リクエスト&レスポンス情報の設定を追加
  mRequestQueue.add(request);

  //リクエスト開始
  mRequestQueue.start(); 
  
 }

}

実行結果は次のようになります。指定した画像が表示されたらOK( ´∀`)bグッ!


以上です(`・ω・´)ゞビシッ!!

参考URL

0 件のコメント:

コメントを投稿