viewpager

实现一个可定制化的TabFlowLayout(四) -- 与ViewPager 结合,实现炫酷效果

倾然丶 夕夏残阳落幕 提交于 2020-01-17 09:07:20
效果图 FlowHelper工程源码 最后就来实现 跟着 viewpager 的效果,如下: 可以看到 ,上面实现了几个效果: 1、子控件的背景跟着自身大小自动变化 2、背景跟着viewpager的滚动自动滑动 3、当移动到中间,如果后面有多余的数据,则让背景保持在中间,内容移动 一、自定义背景 首先,实现一个红色背景框框;首先,思考一下,在 viewgroup 实现 canvas , 是在 onDraw(Canvas canvas) 绘制,还是在 dispatchDraw(Canvas canvas) 呢? 答案肯定是 dispatchDraw 绘制了,为什么呢?这里解释几个概念: onDraw 绘制内容 onDraw 为实际要关心的东西,即所有绘制都在这里。 dispatchDraw 只对ViewGroup有意义 dispatchDraw 通常来讲,可以解释成绘制 子 View View 继承drawable,view 组件的绘制会先调用 draw(Canvas canvas) 方法,然后先绘制 Drawable背景,接着才是调用 onDraw ,然后调用 dispatchDraw方法。dispatchDraw 会分发给组件去绘制。 不过 View 是没有子 view 的,所以dispatchDraw对它来说没意义。 所以,当自定义 ViewGroup 时,加入

Android Studio 使用ViewPager + Fragment实现滑动菜单Tab效果 --简易版

大城市里の小女人 提交于 2020-01-15 08:55:09
描述: 之前有做过一个记账本APP,拿来练手的,做的很简单,是用Eclipse开发的; 最近想把这个APP重新完善一下,添加了一些新的功能,并选用Android Studio来开发; APP已经完善了一部分,现在就想把已经做好的功能整理一下,记录下来。 效果图: 可以手动滑动菜单 也可以通过点击头部菜单进行切换 源码: https://github.com/AnneHan/slidingMenu 具体实现的代码: 前台代码(activity_main.xml): 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical"> 6 7 <LinearLayout 8 android:layout_width="match_parent" 9 android:layout_height="40dp" 10 android:layout_marginTop="1dp" 11 android

AndroidX底部导航栏

社会主义新天地 提交于 2020-01-12 11:53:16
implementation 'me.majiajie:pager-bottom-tab-strip:2.3.0X' 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <androidx.viewpager.widget.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"></androidx.viewpager.widget

ViewPager系列之广告页滑动

最后都变了- 提交于 2020-01-08 11:48:23
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ViewPager是support-v4下的一个控件,视图左右滑动切换工具。要添加这个包才能使用哦!ViewPager是类似于ListView的一个控件,很多的Item组成的,类似于左右翻动的一本书,而ListView只是上下翻动。ViewPager的适配器PagerAdapter类似于ListView的BaseAdapter,使用方面也很类似于ListView,准备数据源,适配器,适配器里面要计算总Item的条目数,绘制每个item视图。。 先上效果图: 完整代码: import android.app.ActionBar; import android.app.Activity; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import java.util.ArrayList;

解决IllegalArgumentException:The observer is null 错误

只愿长相守 提交于 2020-01-08 11:48:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 今天做了一个通讯录用到了viewpager和expandlistview 共同使用。然后其他手机还算正常。在4.0.3系统上,会报IllegalArgumentException:The observer is null 错误。网上说在listview的adapter内重写 unregisterDataSetObserver()方法即可。 @Override 2 public void unregisterDataSetObserver(DataSetObserver observer) { 3 if (observer != null ){ 4 super .unregisterDataSetObserver(observer); 5 } 6 } 恩。试过了。如果是普通的listview的话,直接复写上边方法即可解决问题。话说是由于 viewpager在移除View时会调用ListView的unregisterDataSetObserver方法,而ListView本身也会调用该方法,所以在第二次调用时就会报“The observer is null”错误。 但是,上述方法,不能解决viewpager与expandlistview的结合显示。这时候,我们需要重写expandlistview public

listview、ViewPager tips

て烟熏妆下的殇ゞ 提交于 2020-01-08 11:43:16
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1,listView的childView 与adapter 中数据项的对应关系 listView.getChildCount() 包含了headerView、footerView 以及 cellView, 而 Adapter 的 getItemCount() 只包含数据项(对应cellView 的个数), 所以如果有通过listview的childView 找对应的数据item的话,使用时需要注意计算 //在listview 的 adapter中 int cc = listView.getChildCount(); int headerCount = listView.getHeaderViewsCount(); //int footerCount = listView.getFooterViewsCount(); int itemCount = getCount(); for (int i = 0; i < cc; i++) { View child = listView.getChildAt(i); int tmp_pos = listView.getPositionForView(child); int position = tmp_pos - headerCount; if (position < 0

如何确定片段何时在ViewPager中可见

假装没事ソ 提交于 2020-01-08 11:36:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 问题:在片段实际可见之前,已触发 ViewPager 片段 onResume() 。 例如,我有2个带有 ViewPager 和 FragmentPagerAdapter 。 第二个片段仅适用于授权用户,我需要让用户在该片段可见时登录(使用警报对话框)。 但是,当第一个片段可见时, ViewPager 会创建第二个片段,以便缓存第二个片段,并在用户开始滑动时使其可见。 因此, onResume() 事件在它可见之前就在第二个片段中触发了。 这就是为什么我试图找到一个事件,该事件在第二个片段变得可见时触发,并在适当的时候显示一个对话框。 如何才能做到这一点? #1楼 如何确定片段何时在ViewPager中可见 你可以通过覆盖以下 setUserVisibleHint 在你的 Fragment : public class MyFragment extends Fragment { @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { } else { } } } #2楼 这是使用

【Fragment】懒加载实现

故事扮演 提交于 2020-01-07 05:08:41
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、何为懒加载 懒加载意思也就是当需要的时候才会去加载。 1.1、 为什么Fragment需要懒加载呢? 一般我们都会在 onCreate() 或者 onCreateView() 里去启动一些数据加载操作,比如从本地加载或者从服务器加载。 大部分情况下,这样并不会出现什么问题,但是当你使用 ViewPager + Fragment的时候,问题就来了,这时就应该考虑是否需要实现懒加载了。 1.2、 viewpager + fragment 坑 ViewPager 为了让滑动的时候可以有很好的用户的体验,也就是防止出现卡顿现象,因此它有一个缓存机制。 默认情况下,ViewPager 会提前创建好当前 Fragment 旁的两个Fragment。 举个例子说, 也就是如果你当前显示的是编号 3 的Fragment,那么其实编号2和4的Fragment也已经创建好了,也就是说这3个Fragment都已经执行完 onAttach() -> onResume() 这之间的生命周期函数了。 本来 Fragment 的 onResume()表示的是当前 Fragment 处于可见且可交互状态,但由于ViewPager的缓存机制,它已经失去了意义,也就是说我们只是打开了 “3” 这个Fragment,但其实“2” 和 “4

viewpager+Fragment(含有recyclerview+viewpager)低端的机子切换页面滑动的时候明显的卡顿

五迷三道 提交于 2020-01-07 03:44:21
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> viewpager+Fragment(含有recyclerview+viewpager)低端的机子切换页面滑动的时候明显的卡顿 来源: oschina 链接: https://my.oschina.net/u/4000302/blog/3152079