• AndroidGallery


    Gallery-n. 大批观众;画廊,走廊;旁听席;(教堂,议院等的)边座;

    main配置文件的配置:

    View Code
     1 <LinearLayout
     2   xmlns:android="http://schemas.android.com/apk/res/android"
     3   android:background="@drawable/white"
     4   android:orientation="vertical"
     5   android:layout_width="fill_parent"
     6   android:layout_height="fill_parent"
     7   >
     8   <TextView
     9   android:id="@+id/myTextView01"
    10   android:layout_width="fill_parent" 
    11   android:layout_height="wrap_content" 
    12   android:text="@string/hello"
    13   android:gravity="center_vertical|center_horizontal"
    14   />
    15   <Gallery
    16   android:id="@+id/myGallery1" 
    17   android:layout_width="fill_parent" 
    18   android:layout_height="wrap_content" 
    19   android:gravity="bottom" 
    20   /> 
    21 </LinearLayout>

    Activity onCreate方法

     1  public void onCreate(Bundle savedInstanceState)
     2   {
     3     super.onCreate(savedInstanceState);
     4     setContentView(R.layout.main);
     5     mTextView01 = (TextView) findViewById(R.id.myTextView01);
     6     mTextView01.setText(getString(R.string.str_txt1));
     7     mTextView01.setTextColor(Color.BLUE);
     8     ((Gallery) findViewById(R.id.myGallery1))
     9         .setAdapter(new ImageAdapter(this));
    10   }

    需要给Gallery设置Adapter,自定义ImageAdapter。

     public class ImageAdapter extends BaseAdapter
      { /* 类成员 myContext为Context父类 */
        private Context myContext; /* 使用android.R.drawable里的图片作为图库来源,类型为整数数组 */
        private int[] myImageIds =
        {
            android.R.drawable.btn_minus, android.R.drawable.btn_radio,
            android.R.drawable.ic_lock_idle_low_battery,
            android.R.drawable.ic_menu_camera
        }; /* 建构子只有一个参数,即要储存的Context */
    
        public ImageAdapter(Context c)
        {
          this.myContext = c;
        } /* 回传所有已定义的图片总数量 */
    
        public int getCount()
        {
          return this.myImageIds.length;
        } 
      /
    * 利用getItem方法,取得目前容器中影像的数组ID */ public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } /* 取得目前欲显示的影像View,传入数组ID值使之读取与成像 */ public View getView(int position, View convertView, ViewGroup parent) { /* 建立一个ImageView对象 */ ImageView i = new ImageView(this.myContext); i.setImageResource(this.myImageIds[position]); i.setScaleType(ImageView.ScaleType.FIT_XY); /* 设定这个ImageView对象的宽高,单位为dip */ i.setLayoutParams(new Gallery.LayoutParams(120, 120)); return i; }
      /* 依据距离中央的位移量 利用getScale回传views的大小(0.0f to 1.0f) */ public float getScale(boolean focused, int offset) { /* Formula: 1 / (2 ^ offset) */ return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset))); } }

    在ImageAdapter类中有两个非常重要的方法:getCount和getView。其中getCount方法用于返回图像总数,要注意的是,这个总数不能大于图像的实际数(可以小于图像的实际数),否则会抛出越界异常。当Gallery组件要显示某一个图像时,就会调用getView方法,并将当前的图像索引(position参数)传入该方法。一般getView方法用于返回每一个显示图像的组件(ImageView对象)。从这一点可以看出,Gallery组件是即时显示图像的,而不是一下将所有的图像都显示出来。在getView方法中除了创建了ImageView对象,还用从resIds数组中获得了相应的图像资源ID来设置在ImageView中显示的图像。

    自我理解,当要显示下一个图片时候,position会自动+1或者-1,然后先判断此时的position是否超出getCount(),如果超出就会抛出异常,如果没有就调用getView方法,如果是一直往右边,position的数量就会一直增加。 要实现循环出现图像,就需要把getCount()改成无限大,然后在getView里设置image对象要取模得到对应的图像。

    疑问:重写的getItem方法的作用是什么,在底层何时调用?为什么传入的参数是position,返回的值也是position。 

  • 相关阅读:
    jenkins 自动化打包flutter android apk
    k8s 玩转 jenkins
    ceph rbd 找回 pvc
    mysql学习教程之mysql管理
    php链接mysql,php链接mysql的常用方法
    mysql从零开始之MySQL 教程
    mysql从零开始之MySQL 安装
    MySQL8.0.20下载与安装详细图文教程,mysql安装教程
    MySQL8.0.20安装教程,MySQL8.0.20安装详细图文教程
    windwos10安装mysql8.0.20详细图文教程
  • 原文地址:https://www.cnblogs.com/chenyao/p/3002470.html
Copyright © 2020-2023  润新知