Android 學習筆記(十五):Activity-GalleryView

來源:互聯網
上載者:User

LogCat調測資訊

在Window -> Show View -> Other... -> Android -> LogCat,這樣將顯示LogCat的視窗,對於System.out.print()以及Log.d(),可以列印出我們所需要的資訊,例如:

System.out.print("Hello ---------------------/n");
Log.d("WEI","Hi ------------------1-----------");
Log.d("WEI","Hi -------------------2----------");

這樣,我們在LogCat的查視窗,可以看到相關的資訊。Log有5個層級,分別是v,d,i,w,e,使用Log.w類似方式調用。

GalleyView

Galley是畫廊的意思,一般只在圖片顯示中使用,而且也不常用。

1)Android 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">
 </Gallery>

由於Galley使用者處理圖片,因此處理item可採用ImageView,在設定adapter中,我們可以參見《Android 學習筆記(十三):Activity-GridView》中對BaseAdapter進行繼承。

2)Java原始碼

public class Chapter7Test8 extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chapter_7_test8);

        //步驟1:和之前學習的一樣,設定adapter來描述item的內容以及設定item的格式;通過setOnItemClickListener()設定點擊觸發的操作。
        Gallery gallery = (Gallery)findViewById(R.id.gallery);
        gallery.setAdapter(new ImageAdapter(this));
        gallery.setOnItemClickListener(new OnItemClickListener(){
            public void onItemClick(AdapterView<?> parent,View v,int position,long id){
                Toast.makeText(Chapter7Test8.this,""+position,Toast.LENGTH_SHORT).show();
            }
        });
    }
    //步驟2:adapter繼承BaseAdapter,具體描述item。需要建立建構函式,具體化getCount(), getItem(), getItemId(), getView()。
    private class ImageAdapter extends BaseAdapter{
        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 }; //我們將名稱為drawable_sample_1的圖片檔案,拷貝到drawable/下面。
       
        public ImageAdapter(Context context){
            mContext = context;
        }

        public int getCount() {
            return mImageIds.length;
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }
       //步驟3:每個item都是ImageView,通過setImageResource將圖片呈現,設定每個item的大小,以及顯示比例,這裡,我們採用FIT_XY,根據X:Y將整個圖片顯示出來,如果X:Y和圖片長:寬不一樣,圖片可能有些變形。
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView image = new ImageView(mContext);
            image.setImageResource(mImageIds[position]);
            image.setLayoutParams(new Gallery.LayoutParams(150,100));
            image.setScaleType(ImageView.ScaleType.FIT_XY);
            return image;
        }  
    }
}

3)通過xml檔案對item的格式進行設定

我們在res/values/下面增加一個xml檔案,用於描述自訂widget的屬性格式為

<resources>
    <declare-styleable name="XXXX">
        <attr name="AAAAA" format="BBBB"/>
        <attr name="aaaaa" format="bbbb"/>
    </declare-styleable>
</resources>

在R.java中將增加int R.styleable.XXXX[]來表示此定義,如果裡面有2個屬性,則有兩個元素。在本例,設定style的屬性,我們設定一個android已定義的屬性galleryItembackground,它定義一個具有一個邊框的gallery的item。如下:

<resources>
    <declare-styleable name="HelloGallery">
        <attr name="android:galleryItemBackground" />
    </declare-styleable>
</resources>

獲得自訂屬性方式:

TypedArray a= obtainStyledAttributes(R.styleable.XXX/*int[]*/);
attrId = a.getResourceId(R.styleable.XXXX_AAAA,defaultId);//獲得該屬性的ID,如果沒有發現該屬性,則返回defaultId的值。
a.recyle(),//在使用obtainStyledAttributes()後應調用,是的可以被系統重用。

在這個例子中:

        public ImageAdapter(Context context){
            ... ...
            TypedArray a= obtainStyledAttributes(R.styleable.HelloGallery);
            mGalleryItemBackground = a.getResourceId(R.styleable.HelloGallery_android_galleryItemBackground, 0);
            a.recycle();
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            ... ...
            image.setBackgroundResource(mGalleryItemBackground);
            ... ...
        }

相關連結:我的Andriod開發相關文章

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.