手记

Android零基础入门第50节:StackView卡片堆叠

 上一期学习了AdapterViewFilpper的使用,你已经掌握了吗?本期开始学习StackView的使用。

     一、认识StackView

    StackView也是AdapterView Animator的子类,它也用于显示Adapter提供的一系列View。 StackView将会以堆叠(Stack)的方式来显示多个列表项。

    为了控制StackView显示的View组件,StackView提供了如下两种控制方式。

·         拖走StackView中处于顶端的View,下一个View将会显示出来。将上一个View拖进StackView,将使之显示出来。

·         通过调用StackView的showNext()、showPrevious()控制显示下一个、上一个组件。

二、StackView示例

    接下来通过一个简单的示例程序来学习StackView的使用方法。

    继续使用WidgetSample工程的listviewsample模块,在app/main/res/layout/目录下创建stackview_layout.xml文件,在其中填充如下代码片段:

[代码]xml代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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

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

              android:orientation="vertical"

              android:layout_width="match_parent"

              android:layout_height="match_parent">

    <LinearLayout

        android:orientation="horizontal"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:gravity="center_horizontal">

        <Button

            android:id="@+id/prev_btn"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="上一个" />

        <Button

            android:id="@+id/next_btn"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="下一个" />

    </LinearLayout>

    <StackView

        android:id="@+id/stackview"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:loopViews="true" />

</LinearLayout>

    创建一个MyStackAdapter类,继承BaseAdapter类,重写其4个主要方法,具体代码如下:

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

package com.jinyu.cqkxzsxy.android.listviewsample.adapter;

 

import android.content.Context;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

 

/**

 * @创建者 鑫鱻

 * @描述 Android零基础入门到精通系列教程,欢迎关注微信公众号ShareExpert

 */

public class MyStackAdapter   extends BaseAdapter   {

    private Context mContext = null;

    private int[] mImageIds = null;

 

    public MyStackAdapter(Context context, int[]   imageIds) {

        this.mContext   = context;

        this.mImageIds   = imageIds;

    }

 

    @Override

    public int getCount() {

        return mImageIds.length;

    }

 

    @Override

    public Object getItem(int position) {

        return position;

    }

 

    @Override

    public long getItemId(int position) {

        return position;

    }

 

    // 该方法返回的View代表了每个列表项

    @Override

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

        ImageView   imageView = null;

        if(null == convertView) {

            //   创建一个ImageView

            imageView   = new ImageView(mContext);

            //   设置ImageView的缩放类型

            imageView.setScaleType(ImageView.ScaleType.FIT_XY);

            //   为imageView设置布局参数

            imageView.setLayoutParams(new ViewGroup.LayoutParams(

                    ViewGroup.LayoutParams.MATCH_PARENT,   ViewGroup.LayoutParams.MATCH_PARENT));

            convertView   = imageView;

        }   else {

            imageView   = (ImageView) convertView;

        }

 

        //   给ImageView设置图片资源

        imageView.setImageResource(mImageIds[position]);

 

        return imageView;

    }

}

    接下来为StackView提供Adapter,使用自定义的BaseAdapter。新建StackViewActivity.java文件,加载上面新建的布局文件,具体代码如下:

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

package com.jinyu.cqkxzsxy.android.listviewsample;

 

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.Button;

import android.widget.StackView;

 

import com.jinyu.cqkxzsxy.android.listviewsample.adapter.MyStackAdapter;

 

public class StackViewActivity   extends AppCompatActivity   implements View.OnClickListener   {

    private StackView mStackView = null;

    private Button mPrevBtn = null;

    private Button mNextBtn = null;

    private int[] mImageIds = {

            R.drawable.image_01,   R.drawable.image_02, R.drawable.image_03, R.drawable.image_04,

            R.drawable.image_05,   R.drawable.image_06, R.drawable.image_07, R.drawable.image_08

    };

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.stackview_layout);

 

        //   获取界面组件

        mStackView   = (StackView) findViewById(R.id.stackview);

        mPrevBtn   = (Button) findViewById(R.id.prev_btn);

        mNextBtn   = (Button) findViewById(R.id.next_btn);

 

        //   为AdapterViewFlipper设置Adapter

        MyStackAdapter   adapter = new MyStackAdapter(this,   mImageIds);

        mStackView.setAdapter(adapter);

 

        //   为三个按钮设置点击事件监听器

        mPrevBtn.setOnClickListener(this);

        mNextBtn.setOnClickListener(this);

    }

 

    @Override

    public void onClick(View view) {

        switch (view.getId()){

            case R.id.prev_btn:

                //   显示上一个组件

                mStackView.showPrevious();

                break;

            case R.id.next_btn:

                //   显示下一个组件

                mStackView.showNext();

                break;

            default:

                break;

        }

    }

}

    修改程序启动的Activity,运行程序,可以看到界面效果。

    点击上一个或下一个按钮时,StackView将会将组件分别显示出来。当拖动StackView的组件时,也可以实现同样的效果。

    至此,关于Android中常用列表类控件学习完毕,如果还有不清楚的地方建议回头再多做练习,下期开始学习Android中的一些高级UI控件。

    今天就先到这里,如果有问题欢迎留言一起探讨,也欢迎加入Android零基础入门技术讨论微信群,共同成长!

原文链接:http://www.apkbus.com/blog-205190-69406.html

0人推荐
随时随地看视频
慕课网APP