はてなPhoto一覧を表示してみる
Androidのアプリを触り始めたのだが、サンプルが充実している。
ただ、ネット経由ってのがよくわからない。
とりあえず、以前にRSSを取得するコードを再利用し、はてなPhoto一覧を
取得し表示してみる。
サンプルを流用。
まず、最初に呼ばれるクラス
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.rss_main); hatenaBtn = (Button)findViewById(R.id.btn_hatena); rssBtn = (Button)findViewById(R.id.btn_kronos); wikiBtn = (Button)findViewById(R.id.btn_wiki); hatenaBtn.setOnClickListener(this); rssBtn.setOnClickListener(this); wikiBtn.setOnClickListener(this); } public void onClick(View bundle) { if(bundle == hatenaBtn) { //CalledActivityの呼び出し Intent intent=new Intent(this,net.kronos.rss.act.GalleryActivity.class); startActivityForResult(intent,RESULT_OK); } else if(bundle == rssBtn) { Intent intent = new Intent(this,net.kronos.rss.act.Transition3d.class); startActivityForResult(intent, RESULT_OK); } else if(bundle == wikiBtn) { } }
はてな以外にも色々いじってたので、会社のRSS取得とかも入ってますが・・・
そこは気にしないで。
さて、次にActivityを継承した実際に取得して画面へデータを仲介する所ですが、
全部乗せるとえらいことになるので、抜粋。
holder = (HatenaPhotoResourceHolder)this.getPhotoList(); List<String> imgUrlList = holder.getImageUri(); ImageAdapter adapter = new ImageAdapter(this); adapter.setImage(imgUrlList.toArray(new String[0])); Gallery gallery = (Gallery)findViewById(R.id.Gallery01); imageSwitcher = (ImageSwitcher)findViewById(R.id.ImageSwitcher01); imageSwitcher.setFactory(this); imageSwitcher.setClickable(true); imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out)); imageSwitcher.setImageURI(holder.next().getImgUrl()); gallery = (Gallery) findViewById(R.id.Gallery01); gallery.setAdapter(adapter); gallery.setOnItemSelectedListener(this);
ImageAdapter
import java.io.BufferedInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageView; public class ImageAdapter extends BaseAdapter { private Context myContext; private String[] imageUris = {}; public ImageAdapter(Context c) { this.myContext = c; } public int getCount() { return this.imageUris.length; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView i = new ImageView(this.myContext); HttpURLConnection http = null; InputStream in = null; URL url = null; BufferedInputStream bis = null; Bitmap bm = null; try { // 指定した URL の作成 url = new URL(imageUris[position]); // HTTP通信の初期化 http = (HttpURLConnection) url.openConnection(); // HTTP通信のメソッド指定(今回はダウンロードのみなので GET を指定) http.setRequestMethod("GET"); // HTTP通信開始 http.connect(); // HTTP通信でデータを取得 in = http.getInputStream(); bis = new BufferedInputStream(in); // 取得したデータを Bitmap へ変換 bm = BitmapFactory.decodeStream(bis); i.setImageBitmap(bm); } catch (Exception e) { e.printStackTrace(); } finally{ // HTTP 通信の後始末 try{ in.close(); } catch (Exception e) {} try { http.disconnect(); } catch (Exception e) {} } // スケールタイプを設定 i.setScaleType(ImageView.ScaleType.FIT_CENTER); i.setLayoutParams(new Gallery.LayoutParams(150, 200)); return i; } public float getScale(boolean focused,int offset) { return Math.max(0, 1.0f / (float)Math.pow(2, Math.abs(offset))); } public void setImage(String[] imgeurls) { this.imageUris = imgeurls; } private String getFilename(String url) { String filename = null; int pos = url.lastIndexOf("/"); filename = url.substring(pos); return filename; } }
ここで失敗。HttpCilentがあるのを後で気づいたw
後ほど、実装しなおすとして。
ここで、getViewメソッドだが、毎回呼ばれる?
いや、画像を取得する際には呼ばれるだろうが、
画像きりかえ(Gallery)の際もいってるのかな・・・
emulatorでも、実機でも画像がカクカクする。
とりあえず、id:minghaiさんのソースコード参考に
再度作り直しか。