【Android】实例 忐忑的快。RecyclerView的功底因此法。

于Android
Studio中开创项目,名称也“Animation And
Multimedia”,然后在该档面临开创一个Module,名称也“Frame-By-Frame
Animation”。在该Module中贯彻按实例,具体步骤如下。

 

(1)首先在res\drawable目录中上加一个名为fairy.xml的XML资源文件,然后在该文件被定义成动画的图纸资源,具体代码如下:

以让RecyclerView可以当颇具的Android版本中都能应用,Android开发集团以RecyclerView定义在support.v7包中。在采用该控件时索要打开时Modile的build.gradle文件,然后在dependencies节点中上加依赖库的代码。具体代码如下:

compile 'com.android.support:recyclerview-v7:插入版本号'

 

累加完成之后用单击右上较量的Sync
Now进行联合。同步完成后得以以布局文件被补充加RecyclerView控件,语法格式如下:

<android.support.v7.widget.RecyclerView

    android:id="@+id/my_recycler_view"

    android:scrollbars="vertical"

    android:layout_width="match_parent"

    android:layout_height="match_parent"/>

 

控制RecyclerView需要一些常用之法门,具体方法如下:


setLayoutManager:设置列表项的布局管理器,LinearLayoutManager为线性布局管理器、GridLayoutManager也网格布局管理器、StaggeredGridLayoutManager为瀑布流网格布局管理器。


setItemAnimator:设置列表项多或是去时的卡通,可以使主要字new创建
DefaultItemAnimator()对象实现系统默认的卡通片效果。


addItemDecoration:添加列表项分割线。


addOnItemTouchListener:添加列表项的触摸监听器。


removeOnItemTouchListener:移除了排表项的触摸监听器。


setAdapter:设置列表项的适配器,使用RecyclerView.Adapter。

RecyclerView.Adapter是吧RecyclerView所单独设计的适配器类,RecyclerView.Adapter的连带办法如下:


getItemCount:获取列表项的数据。


onBindViewHolder:绑定列表项中所展示的数目。


onCreateViewHolder:在该方式被可加载列表item(子项)中之布局文件。

下面通过一个切实的实例演示RecyclerView垂直列表的实际运用。

 

实例
模拟QQ消息列表

于Android
Studio中开创Module,名称也“QQMessageList”,具体步骤如下:

(1)打开build.gradle(Module:
QQMessageList)文件,然后以拖欠公文中之dependencies节点中补充加依赖库的代码。

(2)修改新建Module的res/layout目录下之布局文件activity_main.xml,将默认添加的布局管理器修改也相对布局管理器并将TextView组件删除,然后上加1个RecyclerView组件用于展示信息列表。具体代码如下:

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

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

03       xmlns:app="http://schemas.android.com/apk/res-auto"

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

05       android:layout_width="match_parent"

06       android:layout_height="match_parent"

07       tools:context="com.mingrisoft.MainActivity">

08       <!--列表控件-->

09       <android.support.v7.widget.RecyclerView

10           android:id="@+id/recyclerview"

11           android:background="#EEEEEE"

12           android:layout_width="match_parent"

13           android:layout_height="wrap_content"

14           android:orientation="vertical"

15           />

16   </RelativeLayout>

 

(3)在res/layout目录中创造1个号为layout_item.xml的布局文件,将默认添加的布局管理器修改也相对布局管理器,首先补充加1个ImageView组件用于展示头像的图标,然后上加1只垂直线性布局管理器,在该布局管理器中上加2个TextView组件分别用于展示名称和文信息。具体代码如下:

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

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

03       android:layout_width="match_parent"

04       android:layout_height="50dp"

05       android:layout_marginBottom="1dp"

06       android:background="@android:color/white"

07       android:gravity="center_vertical">

08       <!--图标-->

09       <ImageView

10           android:id="@+id/img"

11           android:layout_width="50dp"

12           android:layout_height="50dp"

13           android:layout_alignParentLeft="true"

14           android:layout_alignParentStart="true"

15           android:layout_alignParentTop="true" />

16       <LinearLayout

17           android:layout_width="wrap_content"

18           android:layout_height="match_parent"

19           android:layout_toRightOf="@+id/img"

20           android:gravity="center_vertical"

21           android:orientation="vertical">

22           <!--名称-->

23           <TextView

24               android:id="@+id/name"

25               android:layout_width="match_parent"

26               android:layout_height="wrap_content"

27               android:layout_marginLeft="20dp"

28               android:textColor="#000000"

29               android:textSize="15dp" />

30           <!--消息-->

31           <TextView

32               android:id="@+id/info"

33               android:layout_width="match_parent"

34               android:layout_height="wrap_content"

35               android:layout_marginLeft="20dp"

36               android:layout_marginRight="15dp"

37               android:singleLine="true"

38               android:textSize="10dp" />

39       </LinearLayout>

40   </RelativeLayout>

 

(4)在res/values目录中的strings.xml字符串资源文件内补充加名跟文字消息,用于展示在列表中。

(5)在com.mingrisoft包中开创1单名称为Adapter的Java类,首先以此类中开创1独名也MyViewHolder的里类并吃该类继承自RecyclerView.ViewHolder,在拖欠内部类吃获取列表中用来展示名称、头如图标和文字消息之零件。然后给Adapter类继承自RecyclerView.Adapter<Adapter.MyViewHolder>并且实现相互之间对应之方。具体代码如下:

01   public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHolder> {

02       @Override

03       public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

04           return null;

05       }

06       @Override

07       public void onBindViewHolder(MyViewHolder holder, int position) {

08       }

09       @Override

10       public int getItemCount() {

11           return 0;

12       }

13       class MyViewHolder extends RecyclerView.ViewHolder {

14           public TextView name, info;              //编号文字

15           public ImageView img;                     //图标

16    

17           //获取相关控件

18           public MyViewHolder(View itemView) {

19               super(itemView);

20               name = (TextView) itemView.findViewById(R.id.name);

21               info = (TextView) itemView.findViewById(R.id.info);

22               img = (ImageView) itemView.findViewById(R.id.img);

23           }

24       }

25   }

 

(6)创建3单int类型的数组分别用于保存头像的图标资源、名字、文字信息,然后创建3个ArrayList集合分别用于保存数组中之资源文件,最后创建1独Adapter构造方法,在拖欠方式被安菜单行数与行内图标、名称与文信息实际代码如下:

01   //图标数组

02   private int[] icons = {

03           R.mipmap.icon_1, R.mipmap.icon_2, R.mipmap.icon_3,

04           R.mipmap.icon_4, R.mipmap.icon_5, R.mipmap.icon_6,

05           R.mipmap.icon_7, R.mipmap.icon_8, R.mipmap.icon_9,

06           R.mipmap.icon_10, R.mipmap.icon_11

07   };

08   //名字数组,引用资源文件中的文字

09   private int[] names = {

10           R.string.name1, R.string.name2, R.string.name3,

11           R.string.name4, R.string.name5, R.string.name6,

12           R.string.name7, R.string.name8, R.string.name9,

13           R.string.name10, R.string.name11

14   };

15   //信息数组

16   private int[] infos = {

17           R.string.info1, R.string.info2, R.string.info3,

18           R.string.info4, R.string.info5, R.string.info6,

19           R.string.info7, R.string.info8, R.string.info9,

20           R.string.info10, R.string.info11

21   };

22   private Context lContext;   //上下文

23   private List<Integer> listIcon = new ArrayList<Integer>();   //图标集合

24   private List<Integer> listName = new ArrayList<Integer>();   //名称集合

25   private List<Integer> listInfo = new ArrayList<Integer>();   //信息集合

26   public Adapter(Context context) {

27       lContext = context;

28       //设置菜单行数与行内图标、名称、信息

29       for (int i = 0; i < 11; i++) {

30           listIcon.add(icons[i]);

31           listName.add(names[i]);

32           listInfo.add(infos[i]);

33       }

34   }

 

(7)重写MyViewHolder
onCreateViewHolder()方法,在拖欠方法中落实获取列表中,每行item的布局文件。修改后代码如下:

01   @Override

02   public MyViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {

03       //获取列表中,每行的布局文件

04       View view = LayoutInflater.from(lContext).inflate(R.layout.layout_item, arg0, false);

05       MyViewHolder holder = new MyViewHolder(view);           //

06       return holder;

07   }

 

(8)重写onBindViewHolder()方法,在该法中装置列表菜单中item(子项)所著的始末。修改后代码如下:

01   @Override

02   public void onBindViewHolder(final MyViewHolder holder, int position) {

03       //设置图标

04       holder.img.setBackgroundResource(listIcon.get(position));

05       //设置名称

06       holder.name.setText(listName.get(position));

07       //设置信息

08       holder.info.setText(listInfo.get(position));

09   }

 

(9)重写getItemCount()方法,在拖欠方式吃实现返回数据集中的路总数。修改后代码如下:

01   @Override

02   public int getItemCount() {

03       return listIcon.size();

04   }

 

(10)打开主活动MainActivity.java文件,定义所待的全局变量,在onCreate()方法中第一得RecyclerView组件,然后呢该安装列表布局管理器,最后也那个安适配器。具体代码如下:

01   public class MainActivity extends AppCompatActivity {

02       private RecyclerView lRecyclerView;     //列表控件

03       private Adapter lAdapter;                //适配器

04       @Override

05       protected void onCreate(Bundle savedInstanceState) {

06           super.onCreate(savedInstanceState);

07           setContentView(R.layout.activity_main);

08           //获取列表控件

09           lRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);

10           //设置列表布局管理

11           lRecyclerView.setLayoutManager(new LinearLayoutManager(this));

12           //设置适配器

13           lRecyclerView.setAdapter(lAdapter = new Adapter(this));

14       }

15   }

 

(10)在工具栏中,找到下拉列表框,然后单击要运行的动(这里呢QQMessageList),再单击右侧的运行按钮,运行效果使图27.27所出示。

 图片 1

祈求27.27 
模拟QQ消息列表                  

 

正文自明日科技将出版的《Android开发详解》,转载请注明出处!!!**

 

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

02   <animation-list xmlns:android="http://schemas.android.com/apk/res/android">

03       <item android:drawable="@drawable/img001" android:duration="60"/>

04       <item android:drawable="@drawable/img002" android:duration="60"/>

05       <item android:drawable="@drawable/img003" android:duration="60"/>

06       <item android:drawable="@drawable/img004" android:duration="60"/>

07       <item android:drawable="@drawable/img005" android:duration="60"/>

08       <item android:drawable="@drawable/img006" android:duration="60"/>

09   </animation-list>

  (2)修改新建筑项目的res\layout目录下之布局文件activity_main.xml,将默认添加的布局管理器修改也垂直线性布局管理器,并且于该布局管理器中将默认添加的TextView组件删除,然后呢修改后底线性布局管理器设置android:id和android:background属性。将android:background属性设置也步骤(1)中开创的卡通片资源,修改后的代码如下:

01   <LinearLayout

02       android:id="@+id/linearLayout"

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

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

05       android:layout_width="match_parent"

06       android:layout_height="match_parent"

07       android:orientation="vertical"

08       android:background="@drawable/fairy"

09       tools:context="com.mingrisoft.MainActivity">

10   </LinearLayout>

  (3)打开默认创建的MainActivity,在拖欠文件被,首先定义一个私房的布尔型变量flag=true,用于判断开始和止动画,然后在onCreate()方法被获垂直线性布局管理器与AnimationDrawable对象,再为布局管理器添加单击事件,最后当onClick()方法中因flag变量的价值来促成动画的开始和住,具体代码如下:

01   public class MainActivity extends AppCompatActivity {

02       private boolean flag = true;

03       @Override

04       protected void onCreate(Bundle savedInstanceState) {

05           super.onCreate(savedInstanceState);

06           setContentView(R.layout.activity_main);

07           //获取布局管理器

08           LinearLayout linearLayout= (LinearLayout) findViewById(R.id.linearLayout);

09           //获取AnimationDrawable对象

10          final AnimationDrawable anim= (AnimationDrawable) linearLayout.getBackground();

11           //为布局管理器添加单击事件

12           linearLayout.setOnClickListener(new View.OnClickListener() { 

13               @Override

14               public void onClick(View v) {

15                   if(flag){

16                       anim.start();            //开始播放动画

17                       flag=false;

18                   }else {

19                       anim.stop();            //停止播放动画

20                       flag=true;

21                   }

22               }

23           });

24       }

25   }

(4)在AndroidManifest.xml文件之<activity>标记中补充加screenOrientation属性,设置其横屏显示,关键代码如下:

android:screenOrientation="landscape"

(5)在工具栏中找到下拉列表框,选择而运行的使(这里也Frame-By-Frame
Animation),再单击右侧的按钮,运行效果使图10.1所著。

 图片 2

贪图10.1
 忐忑的精灵

 

感读者朋友对明朝科技的支持,如果您对书籍受到的授课和光盘源码有其它问题,可以直接登录http://www.mingrisoft.com齐的社区开展发贴,把您的题材详细的辨证一下,我们的技术人员会在那里给您回复!

本文摘自明科技出版的《零基础学Android》,作者:李磊
转载请注明出处!!!

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website