Articles of android viewpager

如何使用左右滑动更改活动

如何使用左右滑动更改活动? 我没有在任何地方find手册。 例:

如何在2个ViewPagers之间产生视差效果?

背景 请考虑以下情形: 有两个viewPagers,每个都有不同的宽度和高度,但两者都有完全相同的页数。 拖动一个应该拖动另一个,所以效果就像一个“视差”效果。 与#2相同,但对于另一个viewPager。 在浏览器之间还有一个自动切换机制,因此每2秒它将自动切换到下一页(如果在最后一页,则切换回第一页)。 问题 我认为我有一些function,但它有一些问题: 这只是简单的XML。 这里没什么特别的 我使用了’OnPageChangeListener’,在’onPageScrolled’中,我使用了假拖动。 问题是,如果用户的拖动停在页面中间附近(因此激活了viewPager左/右自动滚动),假拖动失去了同步,并且可能发生奇怪的事情:页面错误甚至停留在页面之间。 .. 目前,我没有通过拖动用户来处理其他viewPager,但它也可能是一个问题。 当我成功解决#2(或#3)时,这可能是一个问题。 现在,我正在使用一个使用runnable的处理程序并在其中调用此命令: mViewPager.setCurrentItem((mViewPager.getCurrentItem() + 1) % mViewPager.getAdapter().getCount(), true); 我试过的 我已经尝试过这篇文章 ,但是效果不好,因为当用户拖动在完成切换到另一个页面之前停止时会出现同样的问题。 只有类似的解决方案可以使用单个ViewPager( 此处 ),但我需要使用2个ViewPagers,每个都会影响另一个。 所以我自己尝试过:假设一个viewPager是“viewPager”,另一个(应该跟随“viewPager”)是“viewPager2”,这就是我所做的: viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { int lastPositionOffsetPixels=Integer.MIN_VALUE; @Override public void onPageScrolled(final int position, final float positionOffset, final int positionOffsetPixels) { if (!viewPager2.isFakeDragging()) viewPager2.beginFakeDrag(); if(lastPositionOffsetPixels==Integer.MIN_VALUE) { lastPositionOffsetPixels=positionOffsetPixels; return; } […]

在Viewpager中滚动Webview

我在ViewPager有一个WebView 。 并且ViewPager似乎消耗了所有水平滚动,因此我无法在WebView滚动(垂直工作)。 如何实现WebView优先使用水平滚动?

如何在viewPager页面之间自动切换

我有一个Android应用程序,它使用带有两个页面的ViewPager当活动首次显示时,我想依次向用户呈现每个页面,以便他们知道他们可以在两个视图之间滑动。 我没有find任何描述如何执行此操作的文档。 我发现PageTransformations听起来很有希望,但用户必须先刷卡。 一旦ViewPager中的第一页显示,我需要两页自动滚动。 怎样才能达到预期的效果?

使用ViewPager +放大ImageViews的图像库

我想要实施什么? 使用ViewPager的图库。 我之所以选择这个选项是因为图像之间的平滑过渡(我使用的是ImageView),它很好并且很容易实现。 我的问题到底是什么? 我已经能够实现所有这些, 但缩放function不起作用。 我可以在LogCat中看到它是如何打印的ZOOM (代码在post的末尾),但图像没有放大。 关于以下代码的几点说明: ImageViewHelperURL.setUrlDrawable((ImageView) img, url, R.drawable.no_image); 我正在使用UrlImageViewHelper从Web上异步下载图像。 api.getListUrls()这是一个ArrayList,我有图片url。 我也试过使用R.drawable的ImageView而不是下载图像 import android.content.Context; import android.content.Intent; import android.graphics.Matrix; import android.graphics.PointF; import android.os.Bundle; import android.support.v4.app.ActionBar; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.Menu; import android.support.v4.view.MenuItem; import android.support.v4.view.ViewPager; import android.util.FloatMath; import android.util.Log; import android.view.LayoutInflater; import android.view.MenuInflater; import android.view.MotionEvent; import android.view.View; import […]

Android:如何在单个xml文件中实现viewpager和视图

更新:我可以使用以下布局在Viewpager中实现3个文本视图: 我想为这3个视图实现ViewPager。 我希望在单个xml文件中有viewpager和那3个视图。 每个页面都包含每个文本视图。 我已经看到了一些示例,但每个页面都是使用单独的xml布局文件实现的。 如何在单个xml文件中为这3个视图实现viewpager。 如果可能,请提供示例代码或示例。

AsyncTask在ViewPager的每个页面上运行

我在android开发教程中有3个Tabs 现在我想要做的很简单,我在每个页面上使用Fragments。 我想在每个页面上显示rss feed中的不同内容。 问题是,当我转到下一个选项卡时,它运行前一个片段的AsyncTask(在onCreateView中)。 所以从第1页开始,它可以很好地加载内容。 然后当你去第2页时再次运行第1页碎片的onCreateView。 并且显然给出了NullException。 关键是它不应该在第2页运行Page 1的AsyncTask。 我不认为有任何示例代码需要告诉我你需要看哪个部分。 然后我会编辑我的问题。 ListFragment中的AsyncTask: public class MyAsyncTask extends AsyncTask<List, Void, List> { // List of messages of the rss feed private List messages; private volatile boolean running = true; @SuppressWarnings(“unused”) private WeakReference fragmentWeakRef; private MyAsyncTask(NieuwsSectionFragment fragment) { this.fragmentWeakRef = new WeakReference(fragment); } @Override protected void onPreExecute() […]

修复圆形ViewPager的animation

目标 构建一个循环ViewPager。 第一个元素允许您达到峰值到最后一个元素并向其滑动,反之亦然。 您应该能够永远向任一方向滑动。 现在这已经完成了,但这些问题对我的实现不起作用。 以下是一些供参考: 如何创建循环viewpager? ViewPager作为循环队列/包装 https://github.com/antonyt/InfiniteViewPager 我是如何尝试解决问题的 我们将使用大小为7的数组作为示例。 要素如下: [0][1][2][3][4][5][6] 当你在元素0时,ViewPagers不允许你向左滑动! 多么可怕:(。为了解决这个问题,我在正面和结尾添加了1个元素。 [0][1][2][3][4][5][6] // Original [0][1][2][3][4][5][6][7][8] // New mapping 当ViewPageAdapter请求(instantiateItem())元素0时,我们返回元素7.当ViewPageAdapter请求元素8时,我们返回元素1。 同样在ViewPager的OnPageChangeListener中,当使用0调用onPageSelected时,我们使用setCurrentItem(7),当使用8调用onPageSelected时,我们使用setCurrentItem(1)。 这很有效。 问题 当你从1向左滑动到0时,我们设置了CurrentItem(7),它将一直向右移动6个全屏幕。 这不会给出圆形ViewPager的外观,它会让用户在滑动动作时向相反方向的最后一个元素冲去! 这非常非常刺耳。 我是如何试图解决这个问题的 我的第一个倾向是关闭平滑(即所有)animation。 它有点好,但是当你从最后一个元素移动到第一个元素时,它现在变得不稳定,反之亦然。 然后我制作了自己的Scroller。 http://developer.android.com/reference/android/widget/Scroller.html 我发现在元素之间移动时始终有1次调用startScroll(), 除非我从1移动到7和7移动到1。 第一个调用是方向和数量的正确animation。 第二个调用是将所有内容向右移动多个页面的animation。 这是事情变得非常棘手的地方。 我认为解决方案是跳过第二个animation。 所以我做了。 会发生什么是从1到7的平滑animation,有0个打嗝。 完善! 但是,如果你滑动,甚至点击屏幕,你会突然(没有animation)在元素6! 如果你从7滑动到1,你实际上是在元素2.没有调用setCurrentItem(2)或甚至调用OnPageChangeListener,表明你在任何时间点到达2。 但是你实际上并不是第2元,这有点好。 您仍处于元素1,但将显示元素2的视图。 然后当你向左滑动时,你会转到元素1.即使你已经真的在元素1上了……一些代码如何帮助清理: animation被打破,但没有奇怪的副作用 @Override public void startScroll(int startX, int […]

CoordinatorLayout中的ViewPager意外收缩

在我在Android 5.1.1上运行的Android应用中,我使用带有TabLayout的Toolbar进行布局,下面是ViewPager 。 所有这些都放在CoordinatorLayout 。 在ViewPager的第一页是一个RecyclerView服务CardView项目。 我的问题是我的ViewPager不断resize,以便裁剪我的CardView列表项。 我的主要布局看起来基本上像这样: 我的ViewPager服务的第一个片段如下所示: 这会呈现如下所示的内容: 单击布局中的按钮时,我使用startActivityForResult来调用另一个活动,并且在返回到我的活动时, 有时突然我的列表被裁剪,以便只有第一个项目的一半可见: 在ViewPager水平滑动到另一个寻呼机然后返回后,问题就消失了,所以看起来似乎没有正确触发重新布局。 按HOME然后恢复我的活动并不能解决问题。 请注意,即使我没有以任何方式修改我的布局,也会发生这种情况,我只是从startActivityForResult调用返回。 是的,它有时只会发生……而且我没有运行的后台线程可以解释明显的随机行为。 起初我以为它已经缩小了RecyclerView ,但是使用HierarchyViewer我发现它实际上是整个ViewPager缩小到其原始高度的一半左右。 我试过各种各样的黑客来解决这个问题,包括在我的整个视图hiearchy上调用invalidate()和requestLayout() ,但似乎没有任何帮助(虽然刷到另一个页面并再次修复它)。 另外,那些不是我想要求解的那种解决方案……然后我尝试将我的ViewPager高度更改为wrap_content ,这实际上解决了这个特殊问题; 返回我的活动后,我的RecyclerView的第一个项目永远不会被裁剪,我可以向下滚动到其他项目。 但是,现在我的列表中的最后一项始终被裁剪,如此截图中可以看到列表一直滚动到底部: 由于我现在处于一个我不太了解正在发生的事情的地步,我需要一些帮助。 我应该将什么用作我的ViewPager的layout_height,以及 – 首先 – 为什么? 对我来说, match_parent是有道理的,但我该如何思考呢? 在使用match_parent ,我的观点是否有合理的理由被裁剪,或者我实际上遇到了ViewPager , RecyclerView和/或CoordinatorLayout ? 如何确保我的ViewPager始终填充AppBar下方的整个屏幕区域,并且我的RecyclerView可以垂直滚动以正确呈现所有CardView列表项?

Android:在片段中放置活动的onCreate()代码的位置?

我将所有活动转换为Fragments,以便我可以在ViewPager中使用它们。 我已经搜索了这个,但我找不到令人满意的答案,所以这就是我在这里问的原因。 在我的活动中,我在onCreate()方法中编写了一些代码。 我例如调用一些findViewById()来将一些xml按钮链接到我的Activity。 我还在onCreate()中使一些视图不可见,设置OnClickListener() ,用文本填充TextView并删除通知,所有这些都在onCreate()方法中。 我的问题是:我应该把这段代码放在片段中? 在onCreate()? onCreateView()? onActivityCreated()? 为什么? 提前谢谢了!