viewpager

ViewPager+Fragment+FragmentPagerAdapter实现软件主界面

本秂侑毒 提交于 2019-12-10 07:35:18
ViewPager之前的页面是由View构成的,现在由Fragment构成,之前的PagerAdapter这里也换成了FragmentPagerAdapter.因为PagerAdapter有 public Object instantiateItem(ViewGroup container, int position) { container.addView( viewList .get(position)); return viewList .get(position); } 方法是针对视图View的,这里已经不适用。 效果图上: 代码部分: 主界面的XML: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:focusable="false" > <android.support.v4.view.ViewPager android:id="@+id

让ViewPager不可以滚动

橙三吉。 提交于 2019-12-09 18:13:11
关于ViewPager滚动的拦截 首先得知道他怎么就可以滚动了. 才有可能去拦截他,不让他滚动. 那么关于触摸事件,想当然的就会想到onInterceptTouchEvent方法和onTouchEvent方法. 当一个ViewGroup的onInterceptTouchEvent方法决定拦截事件了以后. 那么该viewgroup的onTouchEvent方法才会得以调用. 在ViewPager中onInterceptTouchEvent源代码里有这样一行注释 /* This method JUST determines whether we want to intercept the motion. If we return true, onMotionEvent will be called and we do the actual scrolling there. */ 可见ViewPager的滚动是在onTouchEvent处理的. 能够进入onTouchEvent方法的前提是onInterceptTouchEvent决定要拦截event了. 那么如果我继承ViewPager并且在onInterceptTouchEvent方法中直接不拦截. 那么就不会进入onTouchEvent方法中相关控制滚动的逻辑.就不可以滚了应该是.

解决Android下ViewPager和PagerAdapter中调用notifyDataSe...

谁说胖子不能爱 提交于 2019-12-09 14:22:51
Google在Android 3.0SDK中推出的ViewPager控件很大程度上满足了开发者开发页面左右移动切换的功能,使用非常方便,参见: http://jameszhao84.iteye.com/blog/1344584 。但是使用中发现,在删除或者修改数据的时候,PagerAdapter无法像BaseAdapter那样仅通过notifyDataSetChanged方法通知刷新View。 最基本的方法: 针对于child view比较简单的情况(例如仅有TextView、ImageView等,没有ListView等展示数据的情况),可以在自己的Adapter中加入代码: Java代码 @Override public int getItemPosition(Object object) { return POSITION_NONE; } 这样既可达到一般情况下要求的效果。 存在的问题: 这不是PagerAdapter中的Bug,通常情况下,调用 notifyDataSetChanged方法会让ViewPager通过Adapter的getItemPosition方法查询一遍所有child view,这种情况下,所有child view位置均为POSITION_NONE,表示所有的child view都不存在,ViewPager会调用destroyItem方法销毁,并且重新生成

android自定义tabbar,并带badgeview消息提示

Deadly 提交于 2019-12-07 20:09:21
最早的时候,我用的tab都是在屏幕底端的,后来慢慢的流行在屏幕顶端了,按照用户体验来说,顶部确实比底部好,不仅可以防止按到返回键或者Home等引起误操作,而且tab标题在头顶很显眼很醒目。 一开始朋友推荐使用viewpageindicator,这个可以在 github 上有例子,大家如果没什么特殊需求,基本可以满足要求。根据项目要求我就使用了viewpageindicator,后来项目要求有消息提示,就像ios的badge一样,因此就对viewpageindicator进行修改,改了之后,就出现了下图的情况 就是badge是有了,但是把原本的tab给破坏了,后来我按照viewpageindicator的方式自己写了个例子,加上badge也出现了这种情况,估计tabwidget不适合这种模式(也可能是我水平有限,高手们应该有办法),而且viewpageindicator比较负责,有那么多代码和样式,还得引入library,还得把原本的android-support-v4.jar给删除等等,从而会引起别的问题,虽然都能解决,但是觉得很麻烦,就打算自己再重写一个,tabbar不用tabwidget,而是自己自定义布局tabbar.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http:/

android仿今日头条App、多种漂亮加载效果、选择器汇总、记事本App、Kotlin开发等源码

☆樱花仙子☆ 提交于 2019-12-07 20:08:07
Android精选源码 android漂亮的加载效果 android各种 选择器 汇总源码 Android仿bilibili搜索框效果 Android记事本app、分类,涂鸦、添加图片或者其他附件 仿今日头条app 一个很酷的ViewPager,支持双向自动循环滚动效果源码 Kotlin语言开发开发一款简单豆瓣 app android 流式布局FlowLayout效果源码 Android优质博客 Smart Toast Snackbar简化调用,并提高性能和用户体验! App的界面消息提示中,Toast和Snackbar是咱们经常打交道的哥俩,在使用的过程中,如果不加以封装和处理,调用的简易性以及性能和用户体验上就会存在诸多问题。下面给大家介绍一个我封装的库,SmartShow的使用和实现。添加依赖 1.在Project的gradle文件中 allprojects { ... 阅读原文 自定义 View 梳理:用贝塞尔曲线绘制酷炫轮廓背景 在闲逛一个图片社区时看到这张图片,个人对炫酷的东西比较敏感(视觉肤浅),本来想下载一下这个 App 看一下实际效果,可是没找到。心有不甘,于是分析了一下,感觉实现起来不会太难,自己也花点时间实现了效果,发布了一个库。今天就借助这个开源控件,来为大家梳理一下自定义 View 的整个流程:... 阅读原文 打造高逼格个人中心动效UI

ViewPager+RadioButton仿QQ效果

我的未来我决定 提交于 2019-12-07 13:44:59
RadioButton是自己定制的, 设置android:button="@null" 然后再设置backgroud。 涉及到的问题: 1、如何让RadioGroup在底部,且RadioGroup和Viewpager互不遮挡: 先定义RadioGroup,设置alignparentbottom=true; 再定义ViewPager,设置alignparenttop=true(可以没有)和align_above="@id/radiogroup" 这样就完美的解决了这个问题。 2、如何定制RadioButton: 设置radiobutton的android:button="@null"; 设置radiobutton的android:background为一个自定义selector 3、代码的基本思路: 点击radiobutton的时候根据radiobutton的id设置viewpager要显示的item(viewPager.setCurrentItem(pos)); 滑动viewpager的时候,要根据当先显示的viewpager的item的位置,设置要选中的radiobutton(radiogroup.check(R.id.xx)) 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res

Android 使用RecyclerView实现轮播图

可紊 提交于 2019-12-07 09:14:17
一、需求 之前一篇博客使用ViewPager实现轮播图《 Android ViewPager实现循环轮播图 》,但是ViewPager有个天生的缺陷是View无法重用,此外ViewPager的滑动过程会频繁requestLayout,尽管可以通过addViewInLayout和removeViewInLayout配合PagerAdapter 的startUpdate和finishUpdate可以减少重绘,但在ListView和RecyclerView中仍然达不到最好的效果。因此,使用一种新的方式十分必要。 二、代码实现 RecyclerPagerView public class RecyclerPagerView extends RecyclerView implements Handler.Callback { private static final long TASK_TIMEOUT = 3000; public OnPageChangeListener onPageChangeListener; private final Handler mRecyclerHandler; private final int MSG_PLAY_NEXT = 112233; private volatile boolean isPlaying = false; private

ViewPager实现循环滑动

点点圈 提交于 2019-12-06 16:56:22
在网上看到了viewpager之后自己看了看,效果不错,同样eoe社区也有很多相关的文章,比如http://www.eoeandroid.com/forum.php?mod=viewthread&tid=157771&page=21#pid1384160,大家可以看看,使用viewpager的时候大家不要忘了导入android-support-v4.jar这个包,自己可以去下载。 但是在使用的时候发现以上找到的viewpager不能实现循环滑动,这对于用户体验可能不是太好,所以自己又开始在此基础上寻找其他的方法,最终发现了以下解决办法: 将MyPagerAdapter修改一下: /** * ViewPager适配器 */ public class MyPagerAdapter extends PagerAdapter { public List<View> views; Context context; int mCount; public MyPagerAdapter(Context context,List<View> views) { this.views = views; this.context=context; mCount = views.size(); } @Override public void destroyItem(View collection, int

Android viewpager 动态刷新 及不同的PagerAdapter

时光总嘲笑我的痴心妄想 提交于 2019-12-06 16:55:58
参考链接 (一) https://blog.csdn.net/wbwjx/article/details/52939095 FragmentPagerAdapter && FragmentStatePagerAdapter FragmentPagerAdapter: 所有的Fragment实例一直保存在Fragment manager中,适用于少量固定的fragment,当Fragment不可见时,它的视图会被销毁. 当adapter需要一个指定位置的Fragment时,并且这个Fragment不存在时,getItem就被调到. FragmentStatePagerAdapter: 当Fragment不可见时,整个Fragment实例都会被销毁,saveState()方法会被调用(用于下次恢复Fragment实例) 使用FragmentPagerAdapter时,当每页的Fragment被创建后,getItem()不会被调到了 对于FragmentStatePagerAdapter,由于Fragment被销毁,所以每次都会调用getItem()来判断是否要重新加载. ViewPager动态刷新办法 最终的解决办法,为了保证Fragment重建,和getItem会被调用,采用FragmentStatePagerAdapter,对于getItemPosition方法,

解决 FragmentPagerAdapter.notifyDataSetChanged() ...

早过忘川 提交于 2019-12-06 16:55:36
在一个 Android 应用中,我使用 FragmentPagerAdapter 来处理多 Fragment 页面的横向滑动。不过我碰到了一个问题,即当 Fragment 对应的数据集发生改变时,我希望能够通过调用 mAdapter.notifyDataSetChanged() 来触发 Fragment 页面使用新的数据调整或重新生成其内容,可是当我调用 notifyDataSetChanged() 后,发现什么都没发生。 搜索之后发现不止我一个人碰到这个问题,大家给出的解决办法五花八门,有些确实解决了问题,但是我总感觉问题没搞清楚。于是我决定搞明白这个问题到底是怎么回事,以及正确的用法到底如何。要搞明白这个问题,仅仅阅读文档并不足够,还需要阅读相关几个类的相关方法的实现,搞懂其设计意图。下面就是通过阅读源代码搞明白的内容。 【ViewPager】 ViewPager 如其名所述,是负责翻页的一个 View。准确说是一个 ViewGroup ,包含多个 View 页,在手指横向滑动屏幕时,其负责对 View 进行切换。为了生成这些 View 页,需要提供一个 PagerAdapter 来进行和数据绑定以及生成最终的 View 页。 setAdapter() ViewPager 通过 setAdapter() 来建立与 PagerAdapter 的联系。这个联系是双向的,一方面