Coder Social home page Coder Social logo

zaaach / transformerslayout Goto Github PK

View Code? Open in Web Editor NEW
328.0 7.0 48.0 11.91 MB

:fire::fire::fire: App金刚区导航菜单,类似淘宝、QQ音乐等APP导航,方格布局横向多行滑动翻页带滚动条

Java 100.00%
menu pager navigation scrollbar recyclerview page viewpager

transformerslayout's Introduction

Platform Licence API jitpack

TransformersLayout

🔥 APP金刚区导航布局,下方带横向滚动条,很多APP都有使用这种,效果还不错就封装了一下😄

整体结构是Recyclerview + 滚动条

Features

  • 每页行数、列数可配置
  • 滚动状态自动恢复
  • 支持数据重新排序,类似viewpager的分页模式
  • item布局样式自定义
  • scrollbar样式可配置

Preview

gif

点击下载APK体验

Install

📣项目基于AndroidX构建,参考迁移指南:AndroidX迁移

Step 1: 项目根目录的build.gradle添加如下配置:

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

Step 2: app添加依赖:

dependencies {
	 implementation 'com.github.zaaach:TransformersLayout:x.y.z'
}

记得把x.y.z替换为jitpack中的数字

How to use

Step 1: xml布局文件

<com.zaaach.transformerslayout.TransformersLayout                                         
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    app:tl_spanCount="5"
    app:tl_lines="2"
    app:tl_pagingMode="true"
    app:tl_scrollbarWidth="72dp"
    app:tl_scrollbarHeight="4dp"
    app:tl_scrollbarRadius="2dp"
    app:tl_scrollbarMarginTop="6dp"
    app:tl_scrollbarMarginBottom="6dp"
    app:tl_scrollbarThumbFixedMode="true"
    app:tl_scrollbarThumbFixedWidth="12dp"
    app:tl_scrollbarTrackColor="#f0f0f0"
    app:tl_scrollbarThumbColor="#FFC107"/>

Step 2: 自定义ViewHolder,第三步需要用到

public class NavAdapterViewHolder extends Holder<Nav> {
    private ImageView icon;
    private TextView text;

    NavAdapterViewHolder(@NonNull View itemView) {
        super(itemView);
    }

    @Override
    protected void initView(View itemView) {
        icon = itemView.findViewById(R.id.iv_menu_icon);
        text = itemView.findViewById(R.id.tv_menu_text);
    }

    @Override
    public void onBind(Context context, List<T> list, @Nullable Nav data, int position) {
        text.setText(data.getText());
        Glide.with(context)
                .asBitmap()
                .fitCenter()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .placeholder(R.drawable.default_place_holder)
                .load(data.getUrl())
                .into(icon);
    }
}

Step 3: java代码中调用

List<Nav> navList = DataFactory.loadData();
TransformersLayout<Nav> header = findViewById();
//options可选配置,会覆盖xml里的属性
TransformersOptions options = new TransformersOptions.Builder()
        .lines(2)
        .spanCount(5)
    	.pagingMode(true)
        .scrollBarWidth(Util.dp2px(this, 40))
        .scrollBarHeight(Util.dp2px(this, 3))
        .scrollBarRadius(Util.dp2px(this, 3) / 2f)
        .scrollBarTopMargin(Util.dp2px(this, 6))
    	.scrollBarBottomMargin(Util.dp2px(this, 6))
    	.scrollBarTrackColor(Color.parseColor("#e5e5e5"))
        .scrollBarThumbColor(Color.parseColor("#658421"))
    	.scrollBarThumbFixedMode(true)
    	.scrollBarThumbWidth(Util.dp2px(this, 12))
        .build();
header.apply(options)//options可为null
        .addOnTransformersItemClickListener(new OnTransformersItemClickListener() {
            @Override
            public void onItemClick(int position) {
                showToast();
            }
        })
        .load(navList, new TransformersHolderCreator<Nav>() {
            @Override
            public Holder<Nav> createHolder(View itemView) {
                return new NavAdapterViewHolder(itemView);
            }
            @Override
            public int getLayoutId() {
                return R.layout.item_nav_list;//第二步使用的布局
            }
        });

😏Good luck!!!

支持的attrs属性:

Attributes Format Description
tl_spanCount integer 每页列数,默认5
tl_lines integer 每页行数,默认2
tl_pagingMode boolean 分页模式,数据会重新排序,默认false
tl_scrollbarWidth dimension | reference scrollbar宽度,默认48dp
tl_scrollbarHeight dimension | reference scrollbar高度,默认3dp
tl_scrollbarMarginTop dimension | reference scrollbar上间距
tl_scrollbarMarginBottom dimension | reference scrollbar下间距
tl_scrollbarRadius dimension | reference scrollbar圆角,默认高度的一半
tl_scrollbarTrackColor color | reference scrollbar轨道颜色
tl_scrollbarThumbColor color | reference scrollbar滑块颜色
tl_scrollbarThumbFixedMode boolean scrollbar滑块宽度固定模式
tl_scrollbarThumbFixedWidth dimension |reference scrollbar滑块宽度

Change log

2021-8-30

  • 滚动条滑块宽度固定模式
  • 其他bug修复

2020-12-04

  • 增加scrollbar下间距属性

2020-02-01

  • 修复数据更新问题

2020-01-21

  • 新方法修复滚动条变长变短问题(很完美)
  • 支持数据重新排序
  • 回调方法变动

2020-01-05

  • 修复滚动条突然变长变短的问题
  • 优化默认圆角大小显示效果

2019-12-13

  • 修复滚动条颜色配置无效的问题

About me

掘金: https://juejin.im/user/56f3dfe8efa6310055ac719f

简书: https://www.jianshu.com/u/913a8bb93d12

淘宝店: LEON家居生活馆 (动漫摆件)

LEON

😉淘宝店求个关注😉

License

Copyright (c) 2020 zaaach

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

transformerslayout's People

Contributors

zaaach avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

transformerslayout's Issues

色值无法设置

app:tl_scrollbarTrackColor="#f0f0f0"
app:tl_scrollbarThumbColor="#ff1919"
设置色值无法改变颜色,包括代码设置options一样没有效果

滚动条宽度

大佬, 希望加一个可以设置滚动条宽度的方法, 就是不让黄色滚动条按比例变长变短, 能够设置固定宽度, 即使金刚区列表变多变少, 滚动条宽度也不会改变

提出点需求,看看要不要实现

看到这效果让我想起了表情展示控件,就类似微信那种,所以有几点建议的功能看下能不能加到库里面:

  1. 支持类似ViewPager的效果
    2.支持左右滑动,每一页的item大小可以不一样,即每页的行数和列数可以不一样
  2. 动态显示隐藏某一页

有些情况下控件宽度都为0

//每个item平分整个屏幕的宽度
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) itemView.getLayoutParams();
params.width = mRecyclerView.getMeasuredWidth() / spanCount;
我的情况是这里获取到的MeasuredWidth和width都为0..延时加载后,MeasuredWidth为0.width正确了,但是在onBind里面读取控件的宽高都为0,什么情况?

开启混淆报错

崩溃信息:
Binary XML file line #117 in layout/activity_mood: com.zzx.headerlayout_kotlin.transformation.ScrollTransformation

类名:null

方法:null

行数:0

按demo写 布局不显示

`
val menu :TransformersLayout = TransformersLayout(requireContext())

    menu.load(iconData, object : TransformersHolderCreator<IconBean> {
        override fun getLayoutId(): Int {
            return R.layout.item_index
        }

        override fun createHolder(itemView: View): Holder<IconBean> {
            return meunViewHolder(itemView)
        }
    })

    grid_viewpager.addView(menu)`

log显示RecyclerView: No adapter attached; skipping layout

TransformersLayout 非 AndroidX 版本

首先,感谢作者提供了 AndroidX 版本的代码,但是本人暂时不想使用 AndroidX,所以在作者的基础上,结合项目实际做了些调整。
1、修复与 ViewPager 使用时滑动冲突的问题;
2、增加阻尼效果;
感谢作者的启发和帮助,我把我得到的启发留在这里,希望能够帮助到更多的朋友,如果有需要的朋友移步 Gitee。
https://gitee.com/jboob/transformers-layout

tl_lines 设置问题

比如tl_lines 设置的是3行 一行设置5个数据源 如果总数据源只够1行 或者2行的时候 布局高度 还是按3行高度显示

layout_margin适配有问题

设置左右边margin时,item的数量填不满一页,还出现显示不完整并能左右滑动的bug。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.