【0134】【明日之星-RecyclerView】
1.RecyClerView的认识



2.显示的效果
【传统的listView】

【GridView】纵向的GridView;

【horizentalGridView】横向的GridView

【瀑布流效果】

【动画效果】删除-增加,目前官方的api只提供了一种动画效果,但是在gitHub中已经存在很多种提供动画的解决方案;

3. RecyclerView之实现ListView
3.1 依赖的添加

【导入jar包】



3.2 整体布局
【布局】只布局一个RecycleView控件;

【源码实现】



3.3 适配器
【Adapter的实现】



【item的布局】


【完善adapter】


【绑定Holder】

3.4 设置适配器和布局

【效果】

3.5 为listView 添加分割线

【使用第三方的已经实现的类】参考https://www.imooc.com/learn/215 该课程中对该类进行了书写;





【效果】显示了默认的devider

4. 定制分割线
【说明】颜色的drawable的获取



【设置them的属性值】


【效果】

5.GridView的实现
5.1 添加menuitem的选择项
【源码】RecyclerViewTest-master\app\src\main\res\menu\menu.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <menu xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto"> 4 5 6 <item 7 android:icon="@drawable/ic_menu_add" 8 android:id="@+id/action_add" 9 android:orderInCategory="100" 10 android:title="Add" 11 app:showAsAction="ifRoom"/> 12 <item 13 android:icon="@drawable/ic_menu_delete" 14 android:id="@+id/action_delete" 15 android:orderInCategory="100" 16 android:title="Delete" 17 app:showAsAction="ifRoom"/> 18 19 <item 20 android:id="@+id/action_list" 21 android:orderInCategory="100" 22 android:title="ListView" 23 app:showAsAction="never"/> 24 <item 25 android:id="@+id/action_grid" 26 android:orderInCategory="100" 27 android:title="GridView" 28 app:showAsAction="never"/> 29 30 <item 31 android:id="@+id/action_grad_hor" 32 android:orderInCategory="100" 33 android:title="HorizontalGridView" 34 app:showAsAction="never"/> 35 36 <item 37 android:id="@+id/action_staggered" 38 android:orderInCategory="100" 39 android:title="StaggeredGridView" 40 app:showAsAction="never"/> 41 42 <item 43 android:id="@+id/setting" 44 android:orderInCategory="100" 45 android:title="Setting" 46 app:showAsAction="never"/> 47 48 </menu>
5.2【布局切换】


5.3【水平的recycleView出现了问题】
【原因】分割线的类出现了问题;

【修改】直接指定maigin,宽度设置为固定的值;分割线的类不再使用;


【实现的效果】

6.瀑布流效果的实现
6.1 动态实现适配器的高度的值
【说明】瀑布流就是动态的控制item的高度不一致,此处使用随机数;


1 package com.example.shang.recyclerviewtest; 2 3 import android.content.Context; 4 import android.view.ViewGroup; 5 6 import java.util.ArrayList; 7 import java.util.List; 8 9 // 直接继承前面的adapter,不用再写那个回调接口,而且代码也变简洁了 10 public class StaggeredAdapter extends MyViewAdapter{ 11 12 13 private List<Integer>mHeights; 14 15 public StaggeredAdapter(Context context, List<String>datas){ 16 super(context,datas); 17 18 mHeights = new ArrayList<>(); 19 for (int i = 0; i<mDatas.size();i++){ 20 mHeights.add((int) (100+Math.random()*300)); 21 } 22 } 23 24 25 @Override 26 public void onBindViewHolder(MyViewHolder holder, int position) { 27 holder.mItemTX.setText(mDatas.get(position)); 28 ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams(); 29 lp.height = mHeights.get(position); 30 holder.itemView.setLayoutParams(lp); 31 32 33 setUpItemEvent(holder); 34 } 35 36 37 38 }
6.2 activity的设置
【源码】RecyclerViewTest-master\app\src\main\java\com\example\shang\recyclerviewtest\StaggeredActivity.java
1 package com.example.shang.recyclerviewtest; 2 3 import android.content.Intent; 4 import android.os.Bundle; 5 import android.support.v7.app.AppCompatActivity; 6 import android.support.v7.widget.GridLayoutManager; 7 import android.support.v7.widget.LinearLayoutManager; 8 import android.support.v7.widget.RecyclerView; 9 import android.support.v7.widget.StaggeredGridLayoutManager; 10 import android.view.Menu; 11 import android.view.MenuItem; 12 import android.view.View; 13 14 import java.util.ArrayList; 15 import java.util.List; 16 17 public class StaggeredActivity extends AppCompatActivity { 18 19 private RecyclerView mRecyclerView; 20 private List<String> mDatas; 21 private StaggeredAdapter myAdapter; 22 23 @Override 24 protected void onCreate(Bundle savedInstanceState) { 25 super.onCreate(savedInstanceState); 26 setContentView(R.layout.activity_main); 27 initDatas(); 28 initView(); 29 myAdapter = new StaggeredAdapter(this,mDatas); 30 // 记得recycleView需要layoutManager的支持,否则应用虽不会崩溃,但是显示空白 31 //mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 32 mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL)); 33 34 //Context context, int spanCount(数量), int orientation(方向), boolean reverseLayout(是否反转) 35 // mRecyclerView.setLayoutManager(new GridLayoutManager(this,3, GridLayout.VERTICAL,false)); 36 //DividerItemDecoration在包package android.support.v7.widget已经有了,不用再去复制了 37 //mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL)); 38 mRecyclerView.setAdapter(myAdapter); 39 } 40 41 private void initView() { 42 mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerView); 43 } 44 45 private void initDatas() { 46 mDatas = new ArrayList<>(); 47 for (int i = 'A';i<='z';i++){ 48 mDatas.add(""+(char)i); 49 } 50 } 51 52 @Override 53 public boolean onCreateOptionsMenu(Menu menu) { 54 getMenuInflater().inflate(R.menu.menu,menu); 55 return true; 56 } 57 58 @Override 59 public boolean onOptionsItemSelected(MenuItem item) { 60 61 // int id = item.getItemId(); 62 // switch (id){} 63 64 return super.onOptionsItemSelected(item); 65 66 } 67 }




7.recycleView增加和删除动画
7.1 menu的添加
【项目中添加图片资源】


【增加逻辑】


浙公网安备 33010602011771号