recyclerview

RecycleView 倒计时 中因为复用机制导致的倒计时时间混乱的处理方案(转载自掘金)

倖福魔咒の 提交于 2019-12-02 05:34:49
使用背景:在电商项目中的很多item的倒计时显示。 产生问题的原因:1、复用 2、代码多次调用 解决方案:使用Timer + View集合 (使用集合将View保存起来) private Timer mTimer; private Set<RecyclerViewViewHolder> mHolders; public RecyclerViewAdapter(Activity activity, List<Long> itemList) { if (activity == null || itemList == null) { throw new IllegalArgumentException("params can't be null"); } this.activity = activity; this.itemList = itemList; mHolders = new HashSet<>(); mTimer = new Timer(); mTimer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { for (RecyclerViewViewHolder holder : mHolders) { updateTime(holder, holder.getTime()); } } },

Android ScrollView与RecyclerView滑动冲突问题

随声附和 提交于 2019-12-01 07:18:35
在我们日常开发中经常会用到ScrollView与RecyclerView的组合,但是这种组合有时会出现滑动不流畅的问题,也就是卡顿现象 布局如下: <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/recyclerView"> </android.support.v7.widget.RecyclerView> </LinearLayout> </ScrollView> 我们只需要给RecyclerView设置下面两个属性就可以了 注意:

android -------- AndroidX的迁移

拈花ヽ惹草 提交于 2019-12-01 06:17:14
Google 2018 IO 大会推出了 Android新的扩展库 AndroidX,用于替换原来的 Android扩展库,将原来的 android.* 替换成 androidx.* ;只有包名和Maven工件名受到影响,原来的类名,方法名和字段名不会更改。接下来我们来看看使用 AndroidX的扩展库需要哪些配置。 1. AndroidX变化 1)常用依赖库对比: Old build artifact AndroidX build artifact com.android.support:appcompat-v7:28.0.2 androidx.appcompat:appcompat:1.0.0 com.android.support:design:28.0.2 com.google.android.material:material:1.0.0 com.android.support:support-v4:28.0.2 androidx.legacy:legacy-support-v4:1.0.0 com.android.support:recyclerview-v7:28.0.2 androidx.recyclerview:recyclerview:1.0.0 com.android.support.constraint:constraint-layout:1.1.2

Android原生PDF功能实现

匆匆过客 提交于 2019-12-01 05:23:36
1、背景 近期,公司希望实现安卓原生端的PDF功能,要求:高效、实用。 经过两天的调研、编码,实现了一个简单Demo,如上图所示。 关于安卓原生端的PDF功能实现,技术点还是很多的,为了咱们安卓开发的同学少走弯路,通过此文章,简单讲解下Demo的实现原理和主要技术点,并附上源码。 2、安卓PDF现状 目前,PDF功能仍然是安卓的一个短板,不像iOS,有官方强大的PDF Kit可供集成。 不过,安卓也有一些主流的方案,不过各有优缺点: 1、google doc 在线阅读,基于webview,国内需翻墙访问(不可行) 2、跳转设备中默认pdf app打开,前提需要手机安装了pdf 软件(可按需选择) 3、内置 android-pdfview,基于原生native, apk增加约15~20M(可行,不过安装包有点大) 4、内置 mupdf,基于原生native, 集成有点麻烦,增加约9M(可行,不过安装包稍有点大) 5、内置 pdf.js,功能丰富,apk增加5M(基于Webview,性能低,js实现,功能定制复杂) 6、使用x5内核,需要客户端完全使用x5内核(基于Webview,性能低,不能定制功能) 查阅官方资料,这些方案虽然能实现基本的PDF阅读功能,但是多数方案,集成过程较复杂,且性能低下,容易内存溢出造成App闪退。 3、方案选择 经过对各方案的反复比对,本次实现PDF

RecyclerView的简单使用

风格不统一 提交于 2019-12-01 05:07:15
1、RecyclerView RecyclerView也是一种显示数据集的控件,但它比 ListView 和 GridView 强大很多,除了能够完成上面两种控件的功能,还能实现瀑布流的效果,同时支持上拉、下拉刷新。 2、使用方式 引入 RecyclerView 的依赖包 androidx.recyclerview:recyclerview:1.0.0 布局文件中声明一个 RecyclerView 组件 <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content"></androidx.recyclerview.widget.RecyclerView> 在Activity的 onCreate 方法中找到该组件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找到RecyclerView recyclerView =

获取多张本地图片,以及显示图片

给你一囗甜甜゛ 提交于 2019-12-01 04:55:10
先看获取多张本地图片的效果图: 然后加入权限: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA"/> 加入依赖: implementation 'com.github.open-android:ImageSelector:0.1.0' 给布局文件加一个选择图片的按钮,以及显示图片路径的文本: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http:/

滑动事件总结(刷新,加载更多,嵌套滑动)

我只是一个虾纸丫 提交于 2019-11-30 22:44:18
#下拉刷新 在Api21之前,ListView和GridView的使用相当普遍,包括下拉刷新我们也可以使用它,利用他的addHeaderView()和addFooterView()方法,或者使用父级中隐藏View的方式来实现; 在Api21之后,出现了RecyclerView和SwipeRefreshLayout,有人选择了用两者相结合的方式来实现下拉刷新,在看到SwipeRefreshLayout的效果后,我觉得这比之前看到的任何刷新Loading的效果都要简单直接,所有也提倡去替换现有的加载方式。 可是在使用过程中,SwipeRefreshLayout和RecyclerView相结合后,SwipeRefreshLayout下拉后的阻尼效果也好像消失了一样,拉动起来就没那么精神了,对于追求极致的我来说,是不能接受的。 总结: 1.下拉刷新最佳方式:SwipeRefreshLayout和ListView相结合; 2.RecyclerView适用于不需要添加任何刷新单纯展示list数据的情况;也可以和ScrollerView相配合来展示效果。 #上拉加载更多 加载更多相比下拉,其实简单多了。通过监听ListView的滑动距离即最后可见的position是否是最后一项来判断(getLastVisiblePosition())。 #嵌套滑动 在代码设计过程中,应当特别注意

Android5.0+(CoordinatorLayout)

旧街凉风 提交于 2019-11-30 12:44:16
英文原文: https://guides.codepath.com/android/Handling-Scrolls-with-CoordinatorLayout 这篇文章专门讲解和CoordinatorLayout相关的知识点,这也是Design Support Library中最重要与最难的部分。 概览 CoordinatorLayout 实现了多种Material Design中提到的 滚动效果 。目前这个框架提供了几种不用写动画代码就能工作的方法,这些效果包括: 让浮动操作按钮上下滑动,为Snackbar留出空间。 扩展或者缩小Toolbar或者头部,让主内容区域有更多的空间。 控制哪个view应该扩展还是收缩,以及其显示大小比例,包括 视差滚动效果 动画。 设置 首先确保遵循了 Design Support Library 的使用说明。 浮动操作按钮与Snackbar CoordinatorLayout可以用来配合浮动操作按钮的 layout_anchor 和 layout_gravity属性创造出浮动效果,详情请参见 浮动操作按钮 指南。 当 Snackbar 在显示的时候,往往出现在屏幕的底部。为了给Snackbar留出空间,浮动操作按钮需要向上移动。 只要使用CoordinatorLayout作为基本布局,将自动产生向上移动的动画。浮动操作按钮有一个 默认的

动手写一个抖音首页的效果

大兔子大兔子 提交于 2019-11-30 04:24:39
如何实现一个抖音首页的沉浸式视频播放效果 01.疑问 怎么实现一个顺畅的类似抖音的沉浸式播放效果 02.方案 方案1:viewpager+复用,低端机教卡 方案2:recycleview,比较顺畅 方案3:viewpager2 03.实现 public class TestActivity extends BaseActivity { LinearLayoutManager mLinearLayoutManager; int preShowPosition; TestListAdapter madapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_test_test); RecyclerView recyclerView = findViewById(R.id.rv); madapter = new TestListAdapter(this); ArrayList<Object> objects = new ArrayList<>(); objects.add("http://vjs.zencdn.net/v/oceans.mp4");