【Android基礎入門〖13〗】Gallery

1    在 xml 佈局中添加 Gallery

activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Gallery
        android:id="@+id/gallery"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>


2    自定義 ImageAdapter

ImageAdapter.java
package com.example.gallery;
import java.util.List;
import android.content.Context;
import android.content.res.TypedArray;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
@SuppressWarnings("deprecation")
public class ImageAdapter extends BaseAdapter {
    
    private Context context;
    private List<Integer> list;
    private TypedArray typedArray;
    private int item_background;
    
    public ImageAdapter(Context context ,List<Integer> list)
    {
        this.context=context;
        this.list=list;
        this.typedArray = context.obtainStyledAttributes(R.styleable.gallery_style);
        item_background=typedArray.getResourceId(R.styleable.gallery_style_android_galleryItemBackground, 0);
        typedArray.recycle();
    }
    @Override
    public int getCount() {
        return list.size();
    }
    @Override
    public Object getItem(int position) {
        return position;
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView = new ImageView(context);
        //設置顯示的圖片
        imageView.setImageResource(list.get(position));
        
        //設置伸縮規格
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        
        //設置佈局參數
        imageView.setLayoutParams(new Gallery.LayoutParams(150,100));
        
        //設置背景邊框
        imageView.setBackgroundResource(item_background);
        
        return imageView;
    }
}



3    每個 ImageView 的背景參數

res/values/attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="gallery_style">
        <attr name="android:galleryItemBackground" />
    </declare-styleable>
</resources>


4    在 MainActivity 中綁定數據與設置監聽

MainActivity.java
package com.example.gallery;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Gallery;
import android.widget.Toast;
@SuppressWarnings("deprecation")
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Gallery gallery=(Gallery)findViewById(R.id.gallery);
        
        ArrayList<Integer>list=new ArrayList<Integer>();
        list.add(R.drawable.img1);
        list.add(R.drawable.img2);
        list.add(R.drawable.img3);
        list.add(R.drawable.img4);
        list.add(R.drawable.img5);
        list.add(R.drawable.img6);
        list.add(R.drawable.img7);
        
        ImageAdapter adapter=new ImageAdapter(this,list);
        gallery.setAdapter(adapter);
        
        gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {  
            @Override  
            public void onItemSelected(AdapterView<?> parent, View v,int position, long id) {  
                Toast.makeText(getApplicationContext(), "選擇了:  "+ 
                               String.valueOf(position), Toast.LENGTH_SHORT).show();
            }  
            
            @Override  
            public void onNothingSelected(AdapterView<?> arg0) {  
            //這裏不做響應  
            }  
        }); 
    }
}


5    圖片資源

注:圖片最好爲 png 格式的圖片,由於jpg是壓縮後的圖片,在android 中解壓縮有可能導致內存溢出錯誤。
 

6    結果展示

 



轉載請註明出處!



發佈了49 篇原創文章 · 獲贊 220 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章