摘要:說(shuō)明整個(gè)過(guò)程是通過(guò)做一個(gè)圖片切換器來(lái)分析的。作用是循環(huán)給添加兩個(gè)。目的是讓圖片高度和保持一致文件代碼將放置在最底部采用格式,前兩位表示透明度,設(shè)置中的多個(gè)的間距第一次寫博客,有錯(cuò)誤的地方還請(qǐng)批評(píng)指正
說(shuō)明:
整個(gè)過(guò)程是通過(guò)做一個(gè)圖片切換器來(lái)分析的。直接上圖和代碼(第一次發(fā)表博客,有錯(cuò)誤之處還請(qǐng)指教):
將多個(gè)圖片通過(guò)BaseAdapter加入到Gallery中,(Gallery可以將每個(gè)圖片橫著排列,我們可以通過(guò)滑動(dòng)或者點(diǎn)擊來(lái)對(duì)圖片進(jìn)行選擇)。
選擇Gallery圖片時(shí)會(huì)觸發(fā)Gallery的OnItemSelectedListener監(jiān)聽器,這個(gè)監(jiān)聽器會(huì)告訴你點(diǎn)擊的圖片的索引,拿到索引后就可以將它顯示到ImageSwitcher中了。(ImageSwitcher的實(shí)現(xiàn)原理是操作兩個(gè)ImageView,使這兩個(gè)ImageView在切換的時(shí)候可以模擬幻燈片的淡入淡出等操作,使效果更好看。)
通過(guò)以下的層級(jí)關(guān)系可以很明顯的看出!
將代碼貼出來(lái),為了方便閱讀寫了注釋:
ImageShowActivity.java 文件代碼
public class ImageShowActivity extends Activity implements ViewFactory { ImageSwitcher imageSwitcher; //習(xí)慣將控件的聲明寫在這里 Gallery gallery; //習(xí)慣將控件的聲明寫在這里 int[] my_images=new int[]{ //所有在Gallery上要顯示的圖片路徑保存在這里 R.drawable.a1, R.drawable.a2, R.drawable.a3, R.drawable.a4, R.drawable.a5, R.drawable.a6 }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_image_show); setTitle("image_show"); imageSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher1);//得到ImageSwitcher控件 imageSwitcher.setFactory(this);//調(diào)用此方法前,當(dāng)前Activity要先實(shí)現(xiàn)ViewFactory接口, //這個(gè)接口必須繼承makeView()方法(寫在后面)。 //作用是循環(huán)給ImageSwitcher添加兩個(gè)ImageView。 //下面兩個(gè)方法在設(shè)置imageSwitcher幻燈片的轉(zhuǎn)換效果為淡入淡出 imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out)); gallery=(Gallery) findViewById(R.id.gallery1); //下面是自己創(chuàng)建的一個(gè)繼承于BaseAdapter的MyImagesAdapter, //用來(lái)裝載所有的圖片。就相當(dāng)于一個(gè)中間轉(zhuǎn)換器, //先得到所有的圖片,再將所用的圖片傳給Gallery MyImagesAdapter adapter = new MyImagesAdapter(this, my_images); gallery.setAdapter(adapter); //將所用的圖片傳給Gallery gallery.setOnItemSelectedListener(new OnItemSelectedListener() { //當(dāng)點(diǎn)擊Gallery選擇內(nèi)部圖片時(shí),將調(diào)用這個(gè)監(jiān)聽器,這里實(shí)現(xiàn)了給ImageSwitcher設(shè)置圖片 @Override public void onItemSelected(AdapterView> arg0, View arg1, int arg2, long arg3) { //給ImageSwitcher設(shè)置圖片,arg2是當(dāng)前點(diǎn)擊的圖片索引值 imageSwitcher.setImageResource(my_images[arg2]); } @Override public void onNothingSelected(AdapterView> arg0) { // TODO Auto-generated method stub } }); } @Override public View makeView() { //ViewFactory接口的繼承方法,ViewFactory會(huì)循環(huán)調(diào)用兩次這個(gè)方法,目的是創(chuàng)建兩個(gè)ImageVIew, //這樣才能執(zhí)行切換效果 ImageView iv=new ImageView(this); iv.setBackgroundColor(0xFF000000); //設(shè)置背景顏色 iv.setScaleType(ImageView.ScaleType.FIT_XY);//setScaleType()是ImageView控件在承載圖片時(shí),對(duì)圖片處理的各種方式, //此處是將圖片的長(zhǎng)寬布滿ImageView。ImageView的scaleType的屬性有MATRIX(默認(rèn))、 //CENTER、CENTER_CORP、CENTER_INSIDE、FIT_CENTER、FIT_END、FIT_START、FIT_XY //有一個(gè)博主對(duì)這個(gè)屬性講解的很詳細(xì),可以去看一下。[Android ImageView的scaleType屬性與adjustViewBounds屬性][3] iv.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); return iv; } /** ** ** 創(chuàng)建一個(gè)Adapter適配器,來(lái)裝圖片數(shù)組my_images[], ** 在這個(gè)適配器中我們新建了一個(gè)ImageView控件,來(lái)顯示每一張圖片, ** 最后通過(guò)這個(gè)適配器的getView()方法返回裝有圖片的ImageView給Gallery **(這個(gè)適配器本身封裝了循環(huán),不同的圖片在循環(huán)過(guò)程中放在了不同的ImageView中,最后這個(gè)ImageView再一個(gè)個(gè)排列在Gallery中)。 ** */ public class MyImagesAdapter extends BaseAdapter{ private Context context; //后面手動(dòng)創(chuàng)建ImageView控件需要用到Context, private int[] img; //用來(lái)接收?qǐng)D片數(shù)組 public MyImagesAdapter(Context context,int[] images){ //自己定義構(gòu)造函數(shù),用來(lái)在創(chuàng)建實(shí)例的時(shí)候傳參數(shù) this.context=context; this.img=images; } @Override public int getCount() { return img.length; //必填,這樣才知道有多少?gòu)垐D片 } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { //這個(gè)方法很重要,實(shí)現(xiàn)邏輯是: //1.不同的圖片在循環(huán)過(guò)程中放在了不同的ImageView中; //2.最后各個(gè)ImageView再一個(gè)個(gè)排列在Gallery中 ImageView imageView=new ImageView(context); imageView.setImageResource(img[position]); imageView.setAdjustViewBounds(true); //讓ImageView調(diào)整寬高比和圖片一樣。目的是讓圖片高度和Gallery保持一致 imageView.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); return imageView; } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.image_show, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
activity_image_show.xml 文件代碼
第一次寫博客,有錯(cuò)誤的地方還請(qǐng)批評(píng)指正!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/65650.html
摘要:渲染和事件處理通過(guò)這個(gè)數(shù)結(jié)構(gòu)傳遞。對(duì)應(yīng)的數(shù)據(jù)適配器分別是。用圖形表示如下數(shù)據(jù)模型和數(shù)據(jù)流分析數(shù)據(jù)適配器是數(shù)據(jù)到的橋梁,連接數(shù)據(jù)源和。由管理,等在初始化的時(shí)候會(huì)通過(guò)獲取一個(gè),這個(gè)就是的數(shù)據(jù)的最終來(lái)源,即數(shù)據(jù)適配器的數(shù)據(jù)來(lái)源。 概述 ??圖庫(kù)和相機(jī)在內(nèi)部實(shí)現(xiàn)上其實(shí)是共用的一個(gè)app,即Gallery2。它們是Gallery2的兩個(gè)不同的入口。圖庫(kù)的主要功能是展示和管理設(shè)備中的或者網(wǎng)絡(luò)上的媒...
一個(gè)單的利用JS切換圖片的功能showImg(https://segmentfault.com/img/bVQTPa?w=1094&h=748);寫法1: JS切換圖片 圖片描述 function showPic(whichpic){ ...
閱讀 947·2023-04-25 21:21
閱讀 3287·2021-11-24 09:39
閱讀 3138·2021-09-02 15:41
閱讀 2087·2021-08-26 14:13
閱讀 1891·2019-08-30 11:18
閱讀 2890·2019-08-29 16:25
閱讀 580·2019-08-28 18:27
閱讀 1656·2019-08-28 18:17