Android嵌套RecyclerView左右滑动替代自定义view

以前的左右滑动效果采用自定义scrollview或者linearlayout来实现,recyclerview可以很好的做这个功能,一般的需求就是要么一个独立的左右滑动效果,要么在一个列表里的中间部分一个左右滑动效果

而列表里面也容易,只是需要解决一点小问题,个人认为值得一提的就是高度问题,一般的人采用固定死的高度,可是在列表里面展示和机型的不同,固定死的话很难保证美观,动态的高度才能解决问题的所在

首先在一个列表控件布局上添加一个recyclerview控件

<android.support.v7.widget.RecyclerView
  android:id="@+id/plan_recycler"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"/>

然后是adapter适配器布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="wrap_content"
 android:layout_height="match_parent"
 android:padding="@dimen/dimen_20dp">
 <ImageView android:id="@+id/img_icon"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_horizontal"
  android:src="@drawable/bbs_plan_mofa"/>
 <TextView android:id="@+id/tv_content"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_horizontal"
  android:layout_marginTop="@dimen/dimen_8dp"
  android:textSize="15sp"
  android:textColor="@color/color_323232"/>
</LinearLayout>

接下来写adapter

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.xulu.loanmanager.R;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
 * Created by LiuZhen on 2017/6/22.
 */
public class BBSPlanAdapter extends RecyclerView.Adapter<BBSPlanAdapter.MyViewHolder> {
 private List<String> list;
 private LayoutInflater mInflater;
 private Context context=null;
 private int height;
 private boolean isMeasure = false;
 private CallBack callBack;
 public BBSPlanAdapter(Context context, List<String> list, CallBack callBack) {
  this.context=context;
  this.list = list;
  mInflater = LayoutInflater.from(context);
  this.callBack = callBack;
 }
 @Override
 public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  View view = mInflater.inflate(R.layout.item_bbsdetail_plan, parent, false);
  if (!isMeasure) {
   view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
   height = view.getMeasuredHeight();
   callBack.getHeight(height);
  }
  MyViewHolder holder = new MyViewHolder(view);
  return holder;
 }
 public int getHeight(){
  return height;
 }
 @Override
 public void onBindViewHolder(MyViewHolder holder, final int position) {
  holder.itemView.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    callBack.ItemClick(position);
   }
  });
 }
 @Override
 public int getItemCount() {
  return 6;
 }
 static class MyViewHolder extends RecyclerView.ViewHolder{
  @BindView(R.id.tv_content)
  TextView tv_content;
  MyViewHolder(View view){
   super(view);
   ButterKnife.bind(this,view);
  }
 }
 public interface CallBack{
  void getHeight(int height);
  void ItemClick(int position);
 }
}

重点是measure方法,得到测量的高度

接下来就可以直接使用了

private void initScrollList(){
  final RecyclerView planRecycler = (RecyclerView) headView.findViewById(R.id.plan_recycler);
  LinearLayoutManager linearLayoutManager = new LinearLayoutManager(BBSDetailActivity.this);
  linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
  planRecycler.setLayoutManager(linearLayoutManager);
  List<String> list = new ArrayList<>();
  BBSPlanAdapter adapter = new BBSPlanAdapter(BBSDetailActivity.this, list, new BBSPlanAdapter.CallBack() {
   @Override
   public void getHeight(int height) {
    ViewGroup.LayoutParams params = planRecycler.getLayoutParams();
    params.height = height;
    planRecycler.setLayoutParams(params);
   }
   @Override
   public void ItemClick(int position) {
    Toast.makeText(BBSDetailActivity.this,""+position,Toast.LENGTH_SHORT).show();
   }
  });
  planRecycler.setAdapter(adapter);
 }

很简单,完全替代自定义view,效果如下,如果没有测量这一步可能会出现高度不适合,要么是看不到textview的文字,因为太低了,要么就是太高了,不美观。

以上所述是小编给大家介绍的Android嵌套RecyclerView左右滑动替代自定义view,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Android解决viewpager嵌套滑动冲突并保留侧滑菜单功能

    重写子pagerview的dispatchTouchEvent方法,在返回前添加一句getParent().requestDisallowInterceptTouchEvent(true)中断掉事件的传递,类如下 public class SupperViewPager extends ViewPager { private int screenWidth;//屏幕宽度 public SupperViewPager(Context context) { super(context); } pub

  • Android中RecyclerView嵌套滑动冲突解决的代码片段

    在纵向RecyclerView嵌套横向RecyclerView时,如果纵向RecyclerView有下拉刷新功能,那么内部的横向RecyclerView的横向滑动体验会很差.(只有纯横向滑动时,才能滑动内部的横向RecyclerView,否则滑动事件就会影响到下拉刷新),添加拦截判断. public class MySwipeRefreshLayout extends SwipeRefreshLayout { private boolean mIsVpDragger; private final

  • 详解Android中的NestedScrolling机制带你玩转嵌套滑动

    一.概述 Android在support.v4包中为大家提供了两个非常神奇的类: NestedScrollingParent NestedScrollingChild 如果你从未听说过这两个类,没关系,听我慢慢介绍,你就明白这两个类可以用来干嘛了.相信大家都见识过或者使用过CoordinatorLayout,通过这个类可以非常便利的帮助我们完成一些炫丽的效果,例如下面这样的: 这样的效果就非常适合使用NestedScrolling机制去完成,并且CoordinatorLayout背后其实也是利用

  • Android嵌套滑动冲突的解决方法

    android在嵌套滑动的时候会产生滑动冲突.之前我也碰到,但是以前的笔记本丢失了,所以只能重新再写一章. 一.会产生滑动冲突的情况 那么什么时候会产生滑动冲突呢?比如你有个activity,activity的上半部分是一个布局,下半部分是一个可滑动控件(RecyclerView.ListView等),或者下半部分是个viewpager,里面的fragment布局是一个可滑动控件,这样的页面就会产生滑动冲突. 二.以前的做法 虽然我以前的笔记丢失了,但是当时的解决问题的思路我依然记得. (1)重

  • Android ScrollView嵌套横向滑动控件时冲突问题

    前言:今天在开发的时候遇到这样的问题,最外层是ScrollView,里面嵌套了一个横向滑动的日历控件,在滑动日历的时候很卡顿.看到这种问题,自然而然的就会想到scrollview和其他可滑动控件的冲突问题. 解决思路 用户的左右滑动操作被最外层的scrollView控件处理掉了,所以只要让scrollview对左右滑动事件不监听,让其子控件处理左右滑动事件 .重写scrollview的onInterceptTouchEvent方法,当上下滑动时不处理即可. 代码如下 public void se

  • Android嵌套RecyclerView左右滑动替代自定义view

    以前的左右滑动效果采用自定义scrollview或者linearlayout来实现,recyclerview可以很好的做这个功能,一般的需求就是要么一个独立的左右滑动效果,要么在一个列表里的中间部分一个左右滑动效果 而列表里面也容易,只是需要解决一点小问题,个人认为值得一提的就是高度问题,一般的人采用固定死的高度,可是在列表里面展示和机型的不同,固定死的话很难保证美观,动态的高度才能解决问题的所在 首先在一个列表控件布局上添加一个recyclerview控件 <android.support.v

  • 利用Android实现比较炫酷的自定义View

    目录 一.背景 1.1.控件效果 1.2.从功能上分析一下这个控件,大致有以下特点 1.3.从结构上分析 二. 背景圆实现 2.1.实现粒子运动 2.2.实现渐变色圆 2.3.展示背景圆的扇形区域 2.4.实现指针变色 2.5.实现背景圆颜色随扇形角度变化 三.跳动数字动画实现 3.1.属性动画+2个TextView实现数字上下切换动画 四.项目源码 总结 一.背景 1.1.控件效果 要实现的自定义控件效果大致如下,实现过程中用到了比较多的自定义View的API,觉得比较有代表性,就分享出来也当

  • Android中RecyclerView实现滑动删除与拖拽功能

    前言 从Android 5.0开始,谷歌推出了新的控件RecyclerView,相对于早它之前的ListView,优点多多,功能强大,也给我们的开发着提供了极大的便利,今天自己学习一下RecyclerView轻松实现滑动删除及拖拽的效果. 如下图. 相信研究过RecyclerView的同学,应该很清楚该怎么实现这样的效果,若是用ListView,这样的效果实现起来可能就有点麻烦,但是在强大的RecyclerView面前这样的的效果只需很少的代码,因为谷歌给我们提供了强大的工具类ItemTouch

  • Android创建外部lib库及自定义View的图文教程

    前言 随着插件化/组件化的快速发展,现在大部分的项目开发中都会提取公共的代码制作成 Library module,根据具体的业务需求进行拆分.小菜也学习一下如何拆分 lib 包,实际操作很简单,整理一下操作步骤. 拆分创建 Library 在当前 Project 下,File -> New Module,选择 Android Library,进行下一步: 设置具体的 Library/Module/Package 等名称,注意:Module 名称与 Library 相匹配默认为小写,需要的话手动调

  • Android自定义View实现左右滑动选择出生年份

    自定义view的第三篇,模仿的是微博运动界面的个人出生日期设置view,先看看我的效果图: 支持设置初始年份,左右滑动选择出生年份,对应的TextView的值也会改变.这个动画效果弄了好久,感觉还是比较生硬,与微博那个还是有点区别.大家有改进的方案,欢迎一起交流. 自定义View四部曲,这里依旧是这个套路,看看怎么实现的. 1.自定义view的属性: 在res/values/ 下建立一个attrs.xml , 在里面定义我们的属性以及声明我们的整个样式. <?xml version="1.

  • NestScrollView嵌套RecyclerView实现淘宝首页滑动效果

    目录 一.概述 二.开搞 三.处理嵌套滑动 四.实现惯性滑动 一.概述 本文主要实现淘宝首页嵌套滑动,中间tab吸顶效果,以及介绍NestScrollView嵌套RecyclerView处理滑动冲突的方法,淘宝首页的效果图如下: 二.开搞 首先我们通过一张图来分析下页面的布局结构: 先把最基础的页面搭出来,禁用Recycler滑动只需要重写onInterceptTouchEvent.onTouchEvent返回值都设为false即可: <?xml version="1.0" en

  • Android自定义View实现开关按钮

    前言:Android自定义View对于刚入门乃至工作几年的程序员来说都是非常恐惧的,但也是Android进阶学习的必经之路,平时项目中经常会有一些苛刻的需求,我们可以在GitHub上找到各种各样的效果,能用则用,不能用自己花功夫改改也能草草了事.不过随着工作经验和工作性质,越来越觉得自定义View是时候有必要自己花点功夫研究一下. 一.经过这两天的努力,自己也尝试着写了一个Demo,效果很简单,就是开关按钮的实现. 可能有的人会说这效果so easy,找UI切三张图就完事了,何必大费周折自定义.

  • Android自定义View实现shape图形绘制

    概述 之前曾写过一篇文章介绍了Android中drawable使用Shape资源,通过定义drawable中的shape资源能够绘制简单的图形效果,如矩形,椭圆形,线形和圆环等.后来我在项目中正好遇到这样一个需求,要在特定的位置上显示一条垂直的虚线.正当我胸有成竹的把上面的资源文件放入进去的时候,我才发现它并不能符合我的要求.使用shape画出的垂直虚线,其实就是将一条水平的线,旋转90度.但这样做的弊端就是,该View有效区域为旋转90度后与原来位置相重合的区域,还不能随意的改动,这样的效果根

  • Android自定义View仿微博运动积分动画效果

    自定义View一直是自己的短板,趁着公司项目不紧张的时候,多加强这方面的练习.这一系列文章主要记录自己在自定义View的学习过程中的心得与体会. 刷微博的时候,发现微博运动界面,运动积分的显示有一个很好看的动画效果.OK,就从这个开始我的自定义view之路! 看一下最后的效果图: 分数颜色,分数大小,外圆的颜色,圆弧的颜色都支持自己设置,整体还是和微博那个挺像的.一起看看自定义View是怎样一步一步实现的: 1.自定义view的属性: 在res/values/ 下建立一个attrs.xml ,

  • Android 自定义View步骤

    例子如下:Android 自定义View 密码框 例子 1 良好的自定义View 易用,标准,开放. 一个设计良好的自定义view和其他设计良好的类很像.封装了某个具有易用性接口的功能组合,这些功能能够有效地使用CPU和内存,并且十分开放的.但是,除了开始一个设计良好的类之外,一个自定义view应该: l 符合安卓标准 l 提供能够在Android XML布局中工作的自定义样式属性 l 发送可访问的事件 l 与多个Android平台兼容. Android框架提供了一套基本的类和XML标签来帮您创

随机推荐