国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

安卓開發筆記——Gallery組件+ImageSwitcher組件

2019-11-14 21:05:51
字體:
來源:轉載
供稿:網友
安卓開發筆記——Gallery組件+ImageSwitcher組件

什么是Gallery?

Gallery是一個水平的列表選擇框,它允許用戶通過拖動來查看上一個、下一個列表選項。

下圖是今天要實現的最終效果:

利用Gallery組件實現的一個橫向顯示圖像列表,可以通過左、右滑動屏幕來切換圖像,并加上ImageSwitcher實現一個大圖片預覽功能。

1、一步一步來吧,首先先解決下上半部分(圖像導航)

先來看下效果圖,下圖是利用Gallery組件實現的一個橫向顯示圖像列表,可以通過左、右滑動屏幕來切換圖像。

直接上代碼,注釋很全。

MainActivity.java

 1 package com.example.galleytest; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.widget.Gallery; 6 /** 7  *  8  * @author Balla_兔子 9  * 和往常控制使用方法大同小異10  * 1、獲取數據源11  * 2、配置適配器12  * 3、綁定適配器13  */14 public class MainActivity extends Activity {15 16     PRivate Gallery gallery;// 聲明gallery對象17     private ImageAdapter adapter;//聲明自定義adapter對象18 19     // 1、定義數據源20     private int[] images = { R.drawable.item1, R.drawable.item2,21             R.drawable.item3, R.drawable.item4, R.drawable.item5,22             R.drawable.item6, R.drawable.item7, R.drawable.item8,23             R.drawable.item9, R.drawable.item10, R.drawable.item11,24             R.drawable.item12 };25 26     @Override27     protected void onCreate(Bundle savedInstanceState) {28         super.onCreate(savedInstanceState);29         setContentView(R.layout.activity_main);30 31         gallery=(Gallery) findViewById(R.id.gallery);//取得對象32         33         //2、設置適配器34         adapter=new ImageAdapter(images, this);//實例化自定義適配器對象35         36         //3、綁定適配器37         gallery.setAdapter(adapter);38         39     }40 41 }

ImageAdapter.java

 1 package com.example.galleytest; 2  3 import android.content.Context; 4 import android.view.View; 5 import android.view.ViewGroup; 6 import android.widget.BaseAdapter; 7 import android.widget.Gallery; 8 import android.widget.ImageView; 9 import android.widget.ImageView.ScaleType;10 11 //自定義適配器,繼承BaseAdapter復寫方法12 public class ImageAdapter extends BaseAdapter {13 14     private int images[];15     private Context context;16     public ImageAdapter(int res[],Context context){17         this.images=res;18         this.context=context;19     }20     @Override21     //獲取資源總長度22     public int getCount() {23         return images.length;24     }25 26     @Override27     //根據下標id獲取資源對象28     public Object getItem(int position) {29         return images[position];30     }31 32     @Override33     //根據返回下標id34     public long getItemId(int position) {35         return position;36     }37 38     @Override39     //根據下標id返回對象的視圖view40     public View getView(int position, View convertView, ViewGroup parent) {41         //利用ImageView返回圖像展示42         ImageView imageView=new ImageView(context);43         //設置ImageView背景圖44         imageView.setBackgroundResource(images[position]);    45         //setLayoutParams()這個函數用于代碼自定義布局,為創建的view(ImageView)對象設置位置,大小,顏色等一系列的屬性46         imageView.setLayoutParams(new Gallery.LayoutParams(200, 150));47         //設置展示縮放風格48         imageView.setScaleType(ScaleType.FIT_XY);49         return imageView;50     }51 52 }

activity_main.xml

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2     xmlns:tools="http://schemas.android.com/tools" 3     android:layout_width="match_parent" 4     android:layout_height="match_parent" 5     android:paddingBottom="@dimen/activity_vertical_margin" 6     android:paddingLeft="@dimen/activity_horizontal_margin" 7     android:paddingRight="@dimen/activity_horizontal_margin" 8     android:paddingTop="@dimen/activity_vertical_margin" 9     android:orientation="vertical"10     tools:context="com.example.galleytest.MainActivity" >11     <Gallery 12             android:id="@+id/gallery"13             android:layout_width="fill_parent"14             android:layout_height="wrap_content"15         />16 17 </LinearLayout>

執行完上面代碼我們會發現,當圖片滾動到第一張或者最后一張,就自動停止, 我們可以把它設置成無限循環重復的去展示這些圖片。

這里我們只需要去改動自定義ImageAdapter適配器里2個位置就可以實現這個無限循環的效果

其一:返回圖片資源長度,我們返回的長度不再是數組長度,而是一個巨大數

1     //獲取資源總長度2     public int getCount() {3         //return images.length;4         return Integer.MAX_VALUE;//返回一個巨大數5     }

其二:為ImageView設置圖片顯示資源,我們用取余的方法,讓它實現無限循環

 1     public View getView(int position, View convertView, ViewGroup parent) { 2         //利用ImageView返回圖像展示 3         ImageView imageView=new ImageView(context); 4         //設置ImageView背景圖 5         imageView.setBackgroundResource(images[position%images.length]);    //用取余的方法,讓它實現無限循環 6         //setLayoutParams()這個函數用于代碼自定義布局,為創建的view(ImageView)對象設置位置,大小,顏色等一系列的屬性 7         imageView.setLayoutParams(new Gallery.LayoutParams(200, 150)); 8         //設置展示縮放風格 9         imageView.setScaleType(ScaleType.FIT_XY);10         return imageView;11     }

無限循環輕松搞定,再試試看效果吧~

2、結合ImageSwitcher組件,使得圖片瀏覽效果更為流暢(可以把ImageSwitcher粗略的想象成ImageView的加強版,它可以帶來很多效果,比如圖片動畫)

直接上代碼,依舊人性化注釋全面~

MainActivity.java

 1 package com.example.galleytest; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.view.View; 6 import android.view.animation.AnimationUtils; 7 import android.widget.AdapterView; 8 import android.widget.Gallery; 9 import android.widget.ImageSwitcher;10 import android.widget.ImageView;11 import android.widget.ImageView.ScaleType;12 import android.widget.ViewSwitcher.ViewFactory;13 /**14  * 15  * @author Balla_兔子16  * 和往常控制使用方法大同小異17  * 1、獲取數據源18  * 2、配置適配器19  * 3、綁定適配器20  * 21  * 為Grallery設置監聽,因要結合ImageSwitcher,這里需要額外的實現一個圖像制造工廠ViewFactory22  */23 public class MainActivity extends Activity implements android.widget.AdapterView.OnItemSelectedListener,ViewFactory{24 25     private Gallery gallery;// 聲明gallery對象26     private ImageSwitcher imageSwitcher;//聲明一個ImageSwitcher對象27     private ImageAdapter adapter;//聲明自定義adapter對象28 29     // 1、定義數據源30     private int[] images = { R.drawable.item1, R.drawable.item2,31             R.drawable.item3, R.drawable.item4, R.drawable.item5,32             R.drawable.item6, R.drawable.item7, R.drawable.item8,33             R.drawable.item9, R.drawable.item10, R.drawable.item11,34             R.drawable.item12 };35 36     @Override37     protected void onCreate(Bundle savedInstanceState) {38         super.onCreate(savedInstanceState);39         setContentView(R.layout.activity_main);40 41         gallery=(Gallery) findViewById(R.id.gallery);//取得對象42         imageSwitcher=(ImageSwitcher) findViewById(R.id.imageSwitcher);//取得對象43         44         //添加監聽45         gallery.setOnItemSelectedListener(this);46         imageSwitcher.setFactory(this);47         //設置動畫效果,圖片在imageSwitch的漸入漸出效果48         imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));49         imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));50         51         52         //2、設置適配器53         adapter=new ImageAdapter(images, this);//實例化自定義適配器對象54         55         //3、綁定適配器56         gallery.setAdapter(adapter);57         58     }59 60     @Override61     //實現ViewFactory里的制造圖像方法,這里需要返回一個view對象,同樣的我們可以采用返回ImageView62     public View makeView() {63         ImageView imageView=new ImageView(this);64         imageView.setScaleType(ScaleType.FIT_CENTER);//展示效果65         return imageView;66     }67 68     //Gallery組件的監聽器69     @Override70     public void onItemSelected(AdapterView<?> parent, View view, int position,71             long id) {72             imageSwitcher.setBackgroundResource(images[position%images.length]);73     }74 75     @Override76     public void onNothingSelected(AdapterView<?> parent) {77         78     }79 80 }

ImageAdapter.java

 1 package com.example.galleytest; 2  3 import android.content.Context; 4 import android.view.View; 5 import android.view.ViewGroup; 6 import android.widget.BaseAdapter; 7 import android.widget.Gallery; 8 import android.widget.ImageView; 9 import android.widget.ImageView.ScaleType;10 11 //自定義適配器,繼承BaseAdapter復寫方法12 public class ImageAdapter extends BaseAdapter {13 14     private int images[];15     private Context context;16     public ImageAdapter(int res[],Context context){17         this.images=res;18         this.context=context;19     }20     @Override21     //獲取資源總長度22     public int getCount() {23         //return images.length;24         return Integer.MAX_VALUE;//返回一個巨大數25     }26 27     @Override28     //根據下標id獲取資源對象29     public Object getItem(int position) {30         return images[position];31     }32 33     @Override34     //根據返回下標id35     public long getItemId(int position) {36         return position;37     }38 39     @Override40     //根據下標id返回對象的視圖view41     public View getView(int position, View convertView, ViewGroup parent) {42         //利用ImageView返回圖像展示43         ImageView imageView=new ImageView(context);44         //設置ImageView背景圖45         imageView.setBackgroundResource(images[position%images.length]);    //用取余的方法,讓它實現無限循環46         //setLayoutParams()這個函數用于代碼自定義布局,為創建的view(ImageView)對象設置位置,大小,顏色等一系列的屬性47         imageView.setLayoutParams(new Gallery.LayoutParams(200, 150));48         //設置展示縮放風格49         imageView.setScaleType(ScaleType.FIT_XY);50         return imageView;51     }52 53 }

activity_main.xml

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2     xmlns:tools="http://schemas.android.com/tools" 3     android:layout_width="match_parent" 4     android:layout_height="match_parent" 5     android:paddingBottom="@dimen/activity_vertical_margin" 6     android:paddingLeft="@dimen/activity_horizontal_margin" 7     android:paddingRight="@dimen/activity_horizontal_margin" 8     android:paddingTop="@dimen/activity_vertical_margin" 9     android:orientation="vertical"10     tools:context="com.example.galleytest.MainActivity" >11     <Gallery 12             android:id="@+id/gallery"13             android:layout_width="fill_parent"14             android:layout_height="wrap_content"15         />16 17     <ImageSwitcher 18         android:id="@+id/imageSwitcher"19         android:layout_height="wrap_content"20         android:layout_width="fill_parent"21         android:layout_marginTop="20dp"22         ></ImageSwitcher>23 </LinearLayout>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 庆阳市| 仙游县| 波密县| 雷山县| 镇远县| 偏关县| 密山市| 桦甸市| 陵水| 闽侯县| 安义县| 淮北市| 南靖县| 文登市| 资中县| 年辖:市辖区| 兴城市| 雷州市| 潮安县| 津南区| 邵东县| 晋江市| 河池市| 邳州市| 敖汉旗| 丹江口市| 漠河县| 香港 | 北京市| 东丽区| 道孚县| 合水县| 金川县| 普格县| 定西市| 富宁县| 凤城市| 监利县| 鱼台县| 彭州市| 来安县|