Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 安卓第六天筆記--ListView,安卓--listview

安卓第六天筆記--ListView,安卓--listview

編輯:關於android開發

安卓第六天筆記--ListView,安卓--listview


安卓第六天筆記--ListView

1.AdapteView

AdapteView 繼承ViewGroup它的本質是容器

 

AdapterView派生了3個子類:

AbsListView

AbsSpinner

AdapterViewAnimation

這3個類是抽象類

實際使用中采用的是它們的子類

 

 

2.Adpate結構

 

 

3.使用ArrayAdapter完成ListView顯示

 

 

ListView使用的是ListAdapter類型的適配器

由於只顯示文字,所有使用ArrayAdapter

ArrayAdapter 是ListAdapter的子類

 

布局文件

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical">

<!--

divider:分隔線顏色

dividerHeight:分隔線高度

ListView

建議 layout_width:與 layout_height 都設置為match_parent

要預覽的話要有ID屬性

-->

<ListView

    android:id="@+id/lv"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:divider="@color/colorAccent"

    android:dividerHeight="2dp">



</ListView>



</LinearLayout>

 

 

Activity

/**

 * ListView使用

 * ArrayAdapter適配器

 */

public class MainActivity extends AppCompatActivity {



    /*

    ListView

     */

    private ListView lv;



    private String [] items={

            "孫悟空",

            "豬八戒",

            "牛魔王",

            "JAVA",

            "Android",

            "Ajax",

            "XML",

            "Spring",

            "Hibernate",

            "Spring MVC",

            "MyBatis"

    };



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);



        lv = (ListView) findViewById(R.id.lv);



        /*

        public ArrayAdapter(Context context, @LayoutRes int resource, @NonNull T[] objects)



        context:上下文

         */

        //為ListView設置適配器

        lv.setAdapter(new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,items));





    }

}

 

 

 

android.R.layout.simple_list_item_1

內部就是一個TextView

<TextView xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@android:id/text1"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:textAppearance="?android:attr/textAppearanceListItemSmall"

    android:gravity="center_vertical"

    android:paddingStart="?android:attr/listPreferredItemPaddingStart"

    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"

    android:minHeight="?android:attr/listPreferredItemHeightSmall" />

 

 

4.使用SimpleAdapter

public SimpleAdapter(Context context, List<? extends Map<String, ?>> data,
        @LayoutRes int resource, String[] from, @IdRes int[] to)

 

 

context:上下文

LIst<? extends Map<String,/.>> data: 集合類型的對象,每個元素都是一個Map<String,?>對象

resource:提定一個界面布局的ID,布局文件

from:該參數提取Map<String,?>的key

to:int[]類型的參數決定填充哪些控件

 

 

 

布局文件:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.itheima.listviewsimpleadapter.MainActivity"> <!-- ListView --> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView> </RelativeLayout> View Code

 

 

listview填充的布局文件

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <!-- 頭像顯示 --> <ImageView android:id="@+id/iv_icon" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:src="@drawable/libai"/> <!-- 右邊顯示 姓名與描述 --> <LinearLayout android:layout_width="0dp" android:layout_weight="2" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/tv_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="這裡顯示姓名"/> <TextView android:id="@+id/tv_desc" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="這裡顯示描述"/> </LinearLayout> </LinearLayout> View Code

 

                                                            

Activity中SimpleAdapter


/**

 * ListView

 * SimpleAdapter實現

 * @author  劉楠

 */

public class MainActivity extends AppCompatActivity {



    private ListView lv;



    /*

    姓名

     */

    private String[] names = {

            "孫悟空",

            "豬八戒",

            "牛魔王",

            "JAVA"

    };

    /*

    * 圖片資源ID*/

    private int[] resourceID = {

            R.drawable.libai,

            R.drawable.nongyu,

            R.drawable.qingzhao,

            R.drawable.tiger

    };



    private String[] desc = {

            "一個猴子",

            "一頭豬",

            "一頭牛",

            "一門開發語言"

    };



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);





        lv = (ListView) findViewById(R.id.lv);



        //創建一個List集合

        List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();



        //為List添加元素

        for (int i = 0; i < names.length; i++) {

            //聲明一個Map

            Map<String, Object> map = new HashMap<String, Object>();

            map.put("name", names[i]);

            map.put("icon", resourceID[i]);

            map.put("desc", desc[i]);

            //添加到集合

            listItems.add(map);

        }



        //創建一個SimpleAdapter

        /*

        public SimpleAdapter(Context context, List<? extends Map<String, ?>> data,

            @LayoutRes int resource, String[] from, @IdRes int[] to) {



            context:上下文

            LIst<? extends Map<String,/.>> data: 集合類型的對象,每個元素都是一個Map<String,?>對象

            resource:提定一個界面布局的ID,布局文件

            from:該參數提取Map<String,?>的key

            to:int[]類型的參數決定填充哪些控件



         */

        SimpleAdapter simpleAdapter =

                new SimpleAdapter(this, listItems, R.layout.simple_item, new String[]{"name", "icon", "desc"},new int[]{R.id.tv_name,R.id.iv_icon,R.id.tv_desc});



        //為listview設置適配器

        lv.setAdapter(simpleAdapter);



    }

}
 

View Code

 

5.使用BaseAdapter

 

BaseAdapter要實現 以下方法:

 

getCount():方法返回控制該Adapter將會包含多少個列表項

 

getItem(int position): 該方法的返回值決定第Position處的列表項的內容

getItemId(int position): 該方法的返回值決定第Position處的列表項的內容的ID

 

getView(int position,View conerView ,ViewGroup parent)

這個方法絕決返回值第posistion處的列表項

 

5.1.創建一個學生信息錄入,使用ListView展示信息baseAdapter

 

 

布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="學生信息管理系統" android:textColor="#77ff0000" android:textSize="29sp" /> <EditText android:id="@+id/et_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請輸入學生姓名" /> <!-- 性別 --> <RadioGroup android:id="@+id/rgp" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <!-- 性別男 --> <RadioButton android:id="@+id/rb_male" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:checked="true" android:text="male" /> <!-- 性別女 --> <RadioButton android:id="@+id/rb_female" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="female" /> </RadioGroup> <!-- 保存 --> <Button android:id="@+id/btn_save" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="保存" /> <!-- 查詢 --> <Button android:id="@+id/btn_querty" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="查詢全部學生信息" /> <ListView android:id="@+id/lv_item" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="#ff0000" android:dividerHeight="2dp"> </ListView> </LinearLayout> View Code

 

 

ListView要使用的布局

 

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/iv_sex" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_margin="20dp" android:src="@drawable/mr" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:layout_toRightOf="@id/iv_sex" > <TextView android:id="@+id/tv_no" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="學號" /> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_no" android:text="姓名" /> <ImageView android:id="@+id/iv_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_margin="20dp" android:src="@drawable/delete" /> </RelativeLayout> </RelativeLayout> View Code

 

 

數據庫創建類

/** * 數據庫創建類,與維護的類 繼承SQLiteOpenHelper * @author 劉楠 * * 2016-2-20下午6:32:00 */ public class StudentSqliteOpenHelper extends SQLiteOpenHelper { private static final String TAG = "StudentSqliteOpenHelper"; public StudentSqliteOpenHelper(Context context) { super(context, "student.db", null, 2); } /** * 創建數據庫時,執行一次,只執行一次 * 用來創建數據表 */ @Override public void onCreate(SQLiteDatabase db) { Log.i(TAG, "onCreate執行了"); //獲取原來的版本,獲取不到為0 int version = db.getVersion(); if(version==0){ //創建表 String sql= "create table students ( _id integer primary key autoincrement, name varchar(30),gender varchar(10))"; db.execSQL(sql); }else{ //創建表 String sql= "create table students ( _id integer primary key autoincrement, name varchar(30))"; db.execSQL(sql); } } /** * 當數據庫版本發生變化時執行 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.i(TAG, "onUpgrade執行了"); switch (oldVersion) { case 1: String sql= "alter table students add gender varchar(10)"; db.execSQL(sql); break; case 2: break; default: break; } } } View Code

 

 

 

實體類

/** * 學生的封裝類 * * @author 劉楠 * * 2016-2-20下午6:31:20 */ public class Student { /* * ID */ private int id; /* * 姓名 */ private String name; /* * 性別 */ private String gender; public Student() { super(); } public Student(int id, String name, String gender) { super(); this.id = id; this.name = name; this.gender = gender; } public String getGender() { return gender; } public int getId() { return id; } public String getName() { return name; } public void setGender(String gender) { this.gender = gender; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } } View Code

 

 

數據庫工具類

 

/** * 學生數據庫訪問工具類 * * @author 劉楠 * * 2016-2-20下午6:45:03 */ public class StudentDao { /* * 數據庫創建更新類 */ private StudentSqliteOpenHelper helper; public StudentDao(Context context) { helper = new StudentSqliteOpenHelper(context); } /** * 插入一條記錄 * * @param name * 姓名 * @param gender * 性別 * @return 返回插入後的_id */ public long insert(String name, String gender) { // 獲取數據庫 SQLiteDatabase db = helper.getWritableDatabase(); // 插入的列 String nullColumnHack = "values(null,?,?)"; // 占位符 ContentValues values = new ContentValues(); values.put("name", name); values.put("gender", gender); // 執行 long insert = db.insert("students", nullColumnHack, values); // 關閉連接 db.close(); return insert; } /** * 修改一條記錄 * * @param name * 姓名 * @param gender * 性別 * @return 返回插入後的_id */ public long update(String name, String gender) { // 獲取數據庫 SQLiteDatabase db = helper.getWritableDatabase(); // 插入的列 // 占位符 ContentValues values = new ContentValues(); values.put("gender", gender); // 執行 int update = db.update("students", values, "name = ?", new String[] { name }); // 關閉連接 db.close(); return update; } /** * 刪除一條記錄 * * @param name * 姓名 * * @return 返回刪除後的_id */ public int delete(String name) { // 獲取數據庫 SQLiteDatabase db = helper.getWritableDatabase(); // 執行 int delete = db.delete("students", "name = ?", new String[] { name }); // 關閉連接 db.close(); return delete; } /** * 查詢全部學生信息 * * @return */ public List<Student> getAll() { // 容器 List<Student> list = new ArrayList<Student>(); // 獲取數據庫 SQLiteDatabase db = helper.getReadableDatabase(); String[] columns = { "_id", "name", "gender" }; Cursor cursor = db.query("students", columns, null, null, null, null, null); while (cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex("_id")); String name = cursor.getString(cursor.getColumnIndex("name")); String gender = cursor.getString(cursor.getColumnIndex("gender")); // 添加到集合中 list.add(new Student(id, name, gender)); } // 關閉游標 cursor.close(); // 關閉 db.close(); return list; } } View Code

 

 

Activity

 

/**

 

 * 學生管理信息系統Activity

* 步驟 * 1.獲取用戶輸入姓名與選擇的性別 * 2.判斷是否為空,為空就提示,不為空 * 3.保存數據 * 4.點擊查詢,在下方的ListView中顯示所有的學生信息 * 5.為ListView設置BaseAdapter * 6.實現getCount與getView方法 * 7.返回view * 8.點擊刪除,彈出提示對話框, * 9.取消什麼也不做,確定就刪除當前記錄 * @author 劉楠 * * 2016-2-20下午8:59:43 */ public class MainActivity extends Activity implements OnClickListener { /* * 姓名 */ private EditText et_name; /* * 性別 */ private RadioGroup rgp; /* * 保存 */ private Button btn_save; /* * 查詢 */ private Button btn_querty; /* * 學生列表 */ private ListView lv_item; /* * 學生表數據庫操作類 */ private StudentDao studentDao; /* * 學生列表 */ private List<Student> list; /* * 學生列表適配器 */ private StuBaseAdapter stuBaseAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_name = (EditText) findViewById(R.id.et_name); rgp = (RadioGroup) findViewById(R.id.rgp); btn_save = (Button) findViewById(R.id.btn_save); btn_querty = (Button) findViewById(R.id.btn_querty); lv_item = (ListView) findViewById(R.id.lv_item); /* * 初始化數據庫學生表的工具類 */ studentDao = new StudentDao(this); /* * 設置監聽事件 */ btn_save.setOnClickListener(this); btn_querty.setOnClickListener(this); } /** * 單擊事件監聽器 */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_save: // 保存 save(); break; case R.id.btn_querty: // 查詢 query(); break; } } /** * 查詢學生列表 */ private void query() { refresh(); } private void refresh() { /* * 查詢全部學生信息 */ list = studentDao.getAll(); if (stuBaseAdapter == null) { // 判斷 為空就new ,為ListView設置適配器 stuBaseAdapter = new StuBaseAdapter(); lv_item.setAdapter(stuBaseAdapter); } else { // 通知ListView列表改變 stuBaseAdapter.notifyDataSetChanged(); } } /** * 保存學生信息 */ private void save() { // 獲取學生輸入的信息 String name = et_name.getText().toString().trim(); // 判斷 if (TextUtils.isEmpty(name)) { Toast.makeText(this, "學生姓名不能為空", Toast.LENGTH_SHORT).show(); return; } // 獲取性別 String gender = "male"; switch (rgp.getCheckedRadioButtonId()) { case R.id.rb_male: gender = "male"; break; case R.id.rb_female: gender = "female"; break; } // 開始保存 long insert = studentDao.insert(name, gender); if (insert > 0) { Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show(); et_name.setText(""); } else { Toast.makeText(this, "保存失敗", Toast.LENGTH_SHORT).show(); } } /** * 學生列表適配器 * * @author 劉楠 * * 2016-2-20下午7:28:15 */ private class StuBaseAdapter extends BaseAdapter { private static final String TAG = "StuBaseAdapter"; @Override public int getCount() { return list.size(); } @Override public View getView(int position, View convertView, ViewGroup parent) { Log.i(TAG, position + ""); View view; if (convertView == null) { view = View.inflate(MainActivity.this, R.layout.stu_item, null); } else { view = convertView; } // 得到學生對象 final Student student = list.get(position); ImageView iv_sex = (ImageView) view.findViewById(R.id.iv_sex); if ("male".equals(student.getGender())) { iv_sex.setImageResource(R.drawable.mr); } else if ("female".equals(student.getGender())) { iv_sex.setImageResource(R.drawable.miss); } TextView tv_no = (TextView) view.findViewById(R.id.tv_no); tv_no.setText("編號:" + student.getId()); TextView tv_name = (TextView) view.findViewById(R.id.tv_name); tv_name.setText("姓名:" + student.getName()); ImageView iv_delete = (ImageView) view.findViewById(R.id.iv_delete); iv_delete.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 對話框來提示用戶是否刪除 AlertDialog.Builder builder = new AlertDialog.Builder( MainActivity.this); builder.setTitle("刪除").setIcon(R.drawable.tools) .setMessage("確定要刪除這條記錄嗎"); builder.setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog,int which) { /* * 刪除方法 */ int delete = studentDao.delete(student.getName()); if (delete > 0) { Toast.makeText(MainActivity.this, "刪除成功", Toast.LENGTH_SHORT).show(); // 刷新列表 refresh(); } else { Toast.makeText(MainActivity.this, "刪除失敗", Toast.LENGTH_SHORT).show(); } } }); builder.setNegativeButton("取消", null); builder.create().show(); } }); return view; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } } } View Code

 

 

 

 

 

 

 

6.GridView與ExpandableListView

 

GridView:和ListView有共同的父類,都是AbsListView,與ListView很相似

區別:ListView只顯示一列

GridView可以顯示多列

numcolumns:屬性可以設置顯示列數

其它用法與ListView一樣

 

7.Spinner

Spinner其實就是一個列表選擇框,彈出一個菜單提供用戶選擇,

也需要設置Adapter

 

entries:使用XML資源文件數據設置下拉菜單

pupupBackground:列表 選擇框的背景色

prompt:提示信息

7.1  xml

 

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string-array name="books">

        <item>瘋狂JAVA講義</item>

        <item>Android</item>

        <item>JAVA EE企業應用</item>

        <item>Android 第一行代碼</item>

    </string-array>

</resources>

7.2  Avtivity

 

/**

 * Spinner實現

 * 設置適配器

 * @author  劉楠

 */

public class MainActivity extends AppCompatActivity {



    //Spinner

    private Spinner spinner;



    private String [] names={"東邪","西毒","南帝","北丐","中神通"};

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        spinner = (Spinner) findViewById(R.id.spinner);



        //設置適配器

        ArrayAdapter<String> arrayAdapter

                = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,names);



        spinner.setAdapter(arrayAdapter);

    }

}
 

 

 



<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context="com.itheima.spinner.MainActivity">



<!--

第一個Spinner使用entries配置XML資源

-->

    <Spinner

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:entries="@array/books">



    </Spinner>

<!--

第二個沒有配置,

在Activity中設置Adapter

-->

    <Spinner

        android:id="@+id/spinner"

        android:layout_width="match_parent"

        android:layout_height="wrap_content">



    </Spinner>



</LinearLayout>
 

 

 

 

8.AdapterViewFlipper的功能與用法

 

AdapterViewFlipper繼承了AdapterViewAnimator,它也會顯示Adapter提供的多個級件,但它每次只能顯示一個View組件,程序可以通過showPrevious()和showNext()方法控制顯示上一個,下一個,

使用startFlipper()控件自動播放

stopFlipper()停止播放

 

8.1屬性:

animateFirstView:第一個View是否使用動畫

inAnimation:顯示時使用動畫

loopViews:循環到最後一個時,是否自動轉頭到第一個

outAanimation:設置組件隱藏時使用的動畫

 

autoStrat()是否自動播放

flipInterval():設置自動播放的時間

8.2自動播放圖片

布局文件

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context="com.itheima.adapterviewflipper.MainActivity">



    <!--

   flipInterval 5秒顯示時間

   layout_alignParentTop與父窗體頂部對齊

    -->

    <AdapterViewFlipper

        android:id="@+id/flipper"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:layout_alignParentTop="true"

        android:flipInterval="5000"/>





    <Button

        android:layout_alignParentBottom="true"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:onClick="prev"

        android:text="上一個"/>



    <Button

        android:layout_alignParentBottom="true"

        android:layout_centerHorizontal="true"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:onClick="auto"

        android:text="自動播放"/>



    <Button

        android:layout_alignParentRight="true"

        android:layout_alignParentBottom="true"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:onClick="next"

        android:text="下一個"/>

</RelativeLayout>
 

 

Adapter填充的XML布局文件

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent">



    <ImageView

        android:id="@+id/iv_display"

        android:layout_width="match_parent"

        android:layout_height="match_parent">



    </ImageView>



</LinearLayout>

 

 

Activity實現

/**

 * AdapterViewFlipper

 * 步驟1.獲取flipper

 * 2.創建資源與適配器

 * 3.為flipper設置適配器

 *

 * @author 劉楠

 */

public class MainActivity extends AppCompatActivity {



    /*

        flipper

     */

    private AdapterViewFlipper flipper;

    /*

    資源圖片

     */

    private int[] imageIds = new int[]

            {

                    R.drawable.shuangzi, R.drawable.shuangyu,

                    R.drawable.chunv, R.drawable.tiancheng, R.drawable.tianxie,

                    R.drawable.sheshou, R.drawable.juxie, R.drawable.shuiping,

                    R.drawable.shizi, R.drawable.baiyang, R.drawable.jinniu,

                    R.drawable.mojie};



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);



        flipper = (AdapterViewFlipper) findViewById(R.id.flipper);





        //聲明適配器

        BaseAdapter baseAdapter = new BaseAdapter() {

            @Override

            public int getCount() {

                return imageIds.length;

            }



            @Override

            public Object getItem(int position) {

                return position;

            }



            @Override

            public long getItemId(int position) {

                return position;

            }



            @Override

            public View getView(int position, View convertView, ViewGroup parent) {



                View view;

                if (convertView == null) {

                    view = View.inflate(MainActivity.this, R.layout.images, null);

                } else {

                    view = convertView;

                }



                ImageView display = (ImageView) view.findViewById(R.id.iv_display);

                //設置圖片資源

                display.setImageResource(imageIds[position]);

                //設置ImageView的縮放類型

                display.setScaleType(ImageView.ScaleType.FIT_XY);



                return view;

            }

        };



        //設置適配器

        flipper.setAdapter(baseAdapter);

    }





    /**

     * 上一張

     *

     * @param v

     */

    public void prev(View v) {

        flipper.showPrevious();

        flipper.stopFlipping();



    }



    /**

     * 自動播放

     *

     * @param v

     */

    public void auto(View v) {

        flipper.startFlipping();



    }



    /**

     * 下一張

     *

     * @param v

     */

    public void next(View v) {

        flipper.showNext();

        flipper.stopFlipping();



    }

}

 

 

 

9.StackView功能與用法

 

StackView也是AdapterViewAnimator的子類

它也是用於顯示Adapter提供的一系列View的.StackView將會心堆疊Stack的方式來顯示多個列表項

 

拖走StackView中處於頂端的View,下一View將會顯示出來,將上一個View拖進StackView,將進顯示 出來

showNext(),show()Previous()控制顯示下一個與上一個

 

9.1布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="horizontal"

    tools:context="com.itheima.stackview.MainActivity">



   <StackView

       android:id="@+id/stackView"

       android:layout_width="match_parent"

       android:layout_height="wrap_content"

       android:loopViews="true">



   </StackView>



    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal">



        <Button

            android:onClick="prev"

            android:text="上一個"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"/>



        <Button

            android:onClick="next"

            android:text="下一個"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"/>

    </LinearLayout>

</LinearLayout>

 

 

 

填充XML

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

              android:layout_width="match_parent"

              android:layout_height="match_parent">



    <ImageView

        android:id="@+id/iv_display"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"/>

</LinearLayout>

 

 

9.2 實現



/**

 * StackView

 * 步驟

 * 1.獲取stackview

 * 2.建立適配器與資源

 * 3.設置適配器

 */

public class MainActivity extends AppCompatActivity {

    private StackView stackView;

    private int[] imageIds = new int[]

            {

                    R.drawable.bomb5, R.drawable.bomb6, R.drawable.bomb7

                    , R.drawable.bomb8, R.drawable.bomb9, R.drawable.bomb10

                    , R.drawable.bomb11, R.drawable.bomb12, R.drawable.bomb13

                    , R.drawable.bomb14, R.drawable.bomb15, R.drawable.bomb16

            };



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);





        stackView = (StackView) findViewById(R.id.stackView);



        /*

        數據集合

         */

        List<Map<String, Object>> listItem = new ArrayList<Map<String, Object>>();



        for (int i = 0; i < imageIds.length; i++) {

            Map<String, Object> map = new HashMap<String, Object>();



            map.put("image", imageIds[i]);

            listItem.add(map);

        }



        SimpleAdapter simpleAdapter =

                new SimpleAdapter(this, listItem, R.layout.images, new String[]{"image"}, new int[]{R.id.iv_display});

        //設置適配器



        stackView.setAdapter(simpleAdapter);

    }



    /**

     * 上一個

     */

    public void prev(View v){



        stackView.showPrevious();

    }



    /**

     * 下一個

     */

    public void next(View v){

        stackView.showNext();

    }



}
 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved