Android SDKドキュメントのちょっとしたミスGalleryについての勉強
最近GalleryのSDKドキュメントを勉強していると、androidのsdkドキュメントはGalleryの例についてちょっとした間違いがあることがわかりました.ここにコードを貼って、勉強している人に参考にしてもらいます.
まずGalleryを紹介しますandroidのギャラリーで画像を閲覧できますが、
次はsdkのtutorialのコードです
1.
2.Activityでのコードは以下の通り、HelloGallery.JAvaのコードは次のとおりです.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Gallery g = (Gallery) findViewById(R.id.gallery); g.setAdapter(new ImageAdapter(this)); g.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { Toast.makeText(HelloGallery.this, ""+ position, Toast.LENGTH_SHORT).show(); } }); }
3.
//TypedArray a = obtainStyledAttributes(R.styleable.HelloGallery);//これはsdkで提供されている関数ですが、android 2.3ではコンパイルできません.
//ここで変更します.obtainStyledAttributesはContextが属する関数TypedArray=mContextです.obtainStyledAttributes(R.styleable.HelloGallery); mGalleryItemBackground = a.getResourceId( R.styleable.HelloGallery_android_galleryItemBackground, 0); a.recycle(); } public int getCount() { return mImageIds.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(mContext); i.setImageResource(mImageIds[position]); i.setLayoutParams(new Gallery.LayoutParams(150, 100)); i.setScaleType(ImageView.ScaleType.FIT_XY); i.setBackgroundResource(mGalleryItemBackground); return i; } }
まずGalleryを紹介しますandroidのギャラリーで画像を閲覧できますが、
次はsdkのtutorialのコードです
1.
res/layout/main.xml
に次のコードを書きます.<?xml version="1.0" encoding="utf-8"?>
<Gallery xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
2.Activityでのコードは以下の通り、HelloGallery.JAvaのコードは次のとおりです.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Gallery g = (Gallery) findViewById(R.id.gallery); g.setAdapter(new ImageAdapter(this)); g.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { Toast.makeText(HelloGallery.this, ""+ position, Toast.LENGTH_SHORT).show(); } }); }
3.
res/values/
ディレクトリの下にattrs.xml , (Gallery) ,
を作成<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="HelloGallery">
<attr name="android:galleryItemBackground" />
</declare-styleable>
</resources>
4. ImageAdapte.java , (Gallery), 。 , 。
public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private Context mContext;
private Integer[] mImageIds = {
R.drawable.sample_1,
R.drawable.sample_2,
R.drawable.sample_3,
R.drawable.sample_4,
R.drawable.sample_5,
R.drawable.sample_6,
R.drawable.sample_7
};
public ImageAdapter(Context c) {
mContext = c;
//TypedArray a = obtainStyledAttributes(R.styleable.HelloGallery);//これはsdkで提供されている関数ですが、android 2.3ではコンパイルできません.
//ここで変更します.obtainStyledAttributesはContextが属する関数TypedArray=mContextです.obtainStyledAttributes(R.styleable.HelloGallery); mGalleryItemBackground = a.getResourceId( R.styleable.HelloGallery_android_galleryItemBackground, 0); a.recycle(); } public int getCount() { return mImageIds.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(mContext); i.setImageResource(mImageIds[position]); i.setLayoutParams(new Gallery.LayoutParams(150, 100)); i.setScaleType(ImageView.ScaleType.FIT_XY); i.setBackgroundResource(mGalleryItemBackground); return i; } }