Android開発記録雑記

Android開発記録雑記

パソコン中級者ぐらいの私が
スマホアプリの開発をしてみようと思い立ち
Androidで動くアプリ開発過程をこれから書き記していきます。

Amebaでブログを始めよう!
今回は Displaying Bitmaps in Your UI
です。

前回までのビットマップのメモリ管理を基にして
画面遷移のシステムを見ていきます。

まず、スワイプビューを実装してみます。→ Swipe Views

ニュース項目などを切り替えるときに
今のものと次のものをスワイプする画面効果を実装します。

ViewPager PagerAdapter を使います。
public class ImageDetailActivity extends FragmentActivity {
    public static final String EXTRA_IMAGE = "extra_image";
    private ImagePagerAdapter mAdapter;
    private ViewPager mPager;

ViewPagerアダプタをバックアップするためにの静的データセット
    public final static Integer[] imageResIds = new Integer[] {

      R.drawable.sample_image_1,R.drawable.sample_image_2,
      R.drawable.sample_image_3,R.drawable.sample_image_4,
      R.drawable.sample_image_5,R.drawable.sample_image_6,
      R.drawable.sample_image_7,R.drawable.sample_image_8,
      R.drawable.sample_image_9};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.image_detail_pager);
        mAdapter = new ImagePagerAdapter(getSupportFragmentManager(),
          imageResIds.length);
        mPager = (ViewPager) findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);
    }

    public static class ImagePagerAdapter extends FragmentStatePagerAdapter{
        private final int mSize;
        public ImagePagerAdapter(FragmentManager fm, int size) {
            super(fm);
            mSize = size;
        }
        @Override
        public int getCount() {
            return mSize;
        }
        @Override
        public Fragment getItem(int position) {
            return ImageDetailFragment.newInstance(position);
        }
    }
}

public class ImageDetailFragment extends Fragment {
    private static final String IMAGE_DATA_EXTRA = "resId";
    private int mImageNum;
    private ImageView mImageView;
    static ImageDetailFragment newInstance(int imageNum) {
        final ImageDetailFragment f = new ImageDetailFragment();
        final Bundle args = new Bundle();
        args.putInt(IMAGE_DATA_EXTRA, imageNum);
        f.setArguments(args);
        return f;
    }
    public ImageDetailFragment() {}
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mImageNum = getArguments() != null ?
           getArguments().getInt(IMAGE_DATA_EXTRA) : -1;
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        final View v = inflater.inflate(R.layout.image_detail_fragment,
          container, false);
        mImageView = (ImageView) v.findViewById(R.id.imageView);
        return v;
    }


   @Override
   public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
      if (ImageDetailActivity.class.isInstance(getActivity())) {
          final int resId = ImageDetailActivity.
            imageResIds[mImageNum];
          ((ImageDetailActivity)getActivity()).
            loadBitmap(resId,mImageView);
      }
  }
}
public class ImageDetailActivity extends FragmentActivity {

    ...
    private LruCache<String, Bitmap> mMemoryCache;
    @Override
    public void onCreate(Bundle savedInstanceState) {

LRUCacheを初期化する
        ...
    }
    public void loadBitmap(int resId, ImageView imageView) {
        final String imageKey = String.valueOf(resId);
        final Bitmap bitmap = mMemoryCache.get(imageKey);
        if (bitmap != null) {
            mImageView.setImageBitmap(bitmap);
        } else {

バックグラウンドスレッドでビットマップをロードする
            mImageView.setImageResource(R.drawable.image_placeholder);
            BitmapWorkerTask task = new BitmapWorkerTask(mImageView);
            task.execute(resId);
        }
    }
    ...
}


これまでのおさらい的な感じがします。
今回は以上で、次回はグリッドビューをします。