亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

圖片切換器:剖析Gallery和ImageSwitcher的一些細(xì)節(jié)

cheukyin / 1438人閱讀

摘要:說(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è)實(shí)現(xiàn)邏輯:

將多個(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ān)文章

  • Android Gallery2技術(shù)分析

    摘要:渲染和事件處理通過(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ò)上的媒...

    yedf 評(píng)論0 收藏0
  • JS與HTML標(biāo)簽是分離

    一個(gè)單的利用JS切換圖片的功能showImg(https://segmentfault.com/img/bVQTPa?w=1094&h=748);寫法1: JS切換圖片 圖片描述 function showPic(whichpic){ ...

    StonePanda 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<