Playストアのような画面を作りたい。
そんな時に用いるのがPagerAdapt。。
使い方は簡単で、GridViewやListViewで用いたAdapterを使用します。
昔は外部ライブリを参照しないとViewPagerを使えませんでしたが、
Android3.0以降は外部ライブラリを参照しなくても利用できます。
※android-support-v4.jarで今回のサンプルソースを作成しました。
■サンプルソース
・メインアクティビティ
package com.example.pageadapter; import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.support.v4.view.ViewPager; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // カスタム PagerAdapter を生成 PagerAdapt oAdp = new PagerAdapt(getApplicationContext()); oAdp.add(Color.RED); oAdp.add(Color.GREEN); oAdp.add(Color.WHITE); // ViewPager を生成 ViewPager oViewPager = new ViewPager(getApplicationContext()); oViewPager.setAdapter(oAdp); setContentView(oViewPager); } }
・Adapter用ファイル
package com.example.pageadapter; import java.util.ArrayList; import com.example.pageadapter.R; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.support.v4.view.PagerAdapter; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; public class PagerAdapt extends PagerAdapter { private Context mContext; private ArrayListmList; //コンストラクター(クラスの生成時に呼ばれる) public PagerAdapt(Context context) { mContext = context; mList = new ArrayList (); } //リストにアイテムを追加する public void add(Integer item) { mList.add(item); } //アイテム追加後に呼ばれる @Override public Object instantiateItem(ViewGroup oVg, int position) { // リストから取得 Integer iColor = mList.get(position); //レイアウトを作成 LinearLayout oLayout = Make_Linear(); //背景にお色を付ける oLayout.setBackgroundColor(iColor); oVg.addView(oLayout); return oLayout; } //View を削除 @Override public void destroyItem(ViewGroup oVg, int position, Object object) { oVg.removeView((View) object); } //アイテム数を返す @Override public int getCount() { return mList.size(); } //View が存在するかの判定 @Override public boolean isViewFromObject(View view, Object object) { return view == (LinearLayout) object; } private LinearLayout Make_Linear(){ //LinearLayoutを生成 LinearLayout oLayout = new LinearLayout(mContext); //縦に格納 oLayout.setOrientation(LinearLayout.VERTICAL); for (int i = 0; i < 4; i++){ //さらにレイアウトを作成 LinearLayout oL = new LinearLayout(mContext); //横に格納 oL.setOrientation(LinearLayout.HORIZONTAL); oLayout.addView(oL); for (int ii = 0; ii < 3; ii++ ){ //これが最後 LinearLayout oll = new LinearLayout(mContext); //縦に格納 oll.setOrientation(LinearLayout.VERTICAL); //画像とテキストを格納 oll.addView(Make_ImageView()); oll.addView(Make_TextView()); oL.addView(oll); } } return oLayout; } private TextView Make_TextView(){ // TextView を生成 TextView textView = new TextView(mContext); textView.setText("Hello World"); textView.setTextColor(Color.BLACK); textView.setGravity(Gravity.CENTER); return textView; } private ImageView Make_ImageView(){ // ImageViewを生成 ImageView oIv = new ImageView(mContext); //Bitmapを作成 Bitmap oBmp = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.ic_launcher); //Bitmapをimagviewに貼り付ける oIv.setImageBitmap(oBmp); return oIv; } }
■実行結果
こんな感じで仕上がります。
何となくViewFlipperみたいな感じがしますが、
ViewFlipperとの違いは階層の深いLayoutを1画面に複数表示できることらしいです。
(本当かどうかはわからない)
0 件のコメント:
コメントを投稿