- 浏览: 5819420 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
说到ViewPagerIndicator,网上有很多专门的开源库;
我这里重提一下,只是想试试它的实现方法;
记录下来,可以以后快速的修改迭代~~~
很简单的一个类:
用法:
注意:使用了SimpleViewPagerIndicator之后,需要使用indicator.setOnPageChangeListener(...)监听页面的切换,不要再使用viewpager .setOnPageChangeListener(...)设置了。
最后是个Fragment:
主布局:
https://github.com/ogaclejapan/SmartTabLayout
http://www.open-open.com/lib/view/open1426474795101.html
一个带有回弹效果的ViewPager,这个类具体见:
Android 高仿微信6.0主界面 带你玩转切换图标变色
http://blog.csdn.net/lmj623565791/article/details/41087219
Android 自定义控件玩转字体变色 打造炫酷ViewPager指示器
http://blog.csdn.net/lmj623565791/article/details/44098729
Android 教你打造炫酷的ViewPagerIndicator 不仅仅是高仿MIUI
http://blog.csdn.net/lmj623565791/article/details/42160391
Android TabLayout 库:FlycoTabLayout
http://www.open-open.com/lib/view/open1447294190257.html
我这里重提一下,只是想试试它的实现方法;
记录下来,可以以后快速的修改迭代~~~
很简单的一个类:
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; public class SimpleViewPagerIndicator extends LinearLayout { private static final int COLOR_TEXT_NORMAL = 0xFF999999; private static final int COLOR_INDICATOR = Color.BLACK; private String[] mTitles; private int mTabCount; private int mIndicatorColor = COLOR_INDICATOR; private float mTranslationX; private Paint mPaint = new Paint(); private int mTabWidth; private int oldPosition = 0; private ViewPager viewPager; public SimpleViewPagerIndicator(Context context) { this(context, null); } public SimpleViewPagerIndicator(Context context, AttributeSet attrs) { super(context, attrs); mPaint.setColor(mIndicatorColor); mPaint.setStrokeWidth(10.0F); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mTabWidth = w / mTabCount; } public void setTitles(String[] titles) { mTitles = titles; mTabCount = titles.length; } public void setIndicatorColor(int indicatorColor) { this.mIndicatorColor = indicatorColor; } @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); canvas.save(); canvas.translate(mTranslationX, getHeight() - 2); canvas.drawLine(0, 0, mTabWidth, 0, mPaint); canvas.restore(); } public void setViewPager(ViewPager viewPager) { if (viewPager instanceof ViewPager) { this.viewPager = viewPager; viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { View v = getChildAt(position); if (v instanceof TextView) { TextView oldTv = (TextView) getChildAt(oldPosition); oldTv.setTextColor(COLOR_TEXT_NORMAL); TextView tv = (TextView) v; tv.setTextColor(COLOR_INDICATOR); oldPosition = position; } if (onPageChangeListener != null) { onPageChangeListener.onPageSelected(position); } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { scroll(position, positionOffset); } @Override public void onPageScrollStateChanged(int state) { } }); } } public void scroll(int position, float offset) { mTranslationX = getWidth() / mTabCount * (position + offset); invalidate(); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { return super.dispatchTouchEvent(ev); } private void generateIndicators() { if (getChildCount() > 0) this.removeAllViews(); int count = mTitles.length; setWeightSum(count); for (int i = 0; i < count; i++) { TextView tv = new TextView(getContext()); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT); lp.weight = 1; tv.setTag(i); tv.setGravity(Gravity.CENTER); tv.setTextColor(COLOR_TEXT_NORMAL); tv.setText(mTitles[i]); tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); tv.setLayoutParams(lp); tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int position = (Integer) v.getTag(); if (viewPager != null) { viewPager.setCurrentItem(position); } if(onItemClickListener!=null){ onItemClickListener.onItemClick(v, position); } } }); addView(tv); } } private OnPageChangeListener onPageChangeListener; public void setOnPageChangeListener(OnPageChangeListener onPageChangeListener) { this.onPageChangeListener = onPageChangeListener; } public interface OnPageChangeListener { public void onPageSelected(int position); } private OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } public interface OnItemClickListener { public void onItemClick(View view,int position); } /** * 选中当前页 。此方法一定要在setTitles(),setViewPager()之后调用! * * @param position */ public void setCurrentItem(int position) { oldPosition = position; generateIndicators(); if (viewPager != null) { viewPager.setCurrentItem(position); } } }
用法:
package com.example.testviewpagerindicator; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentPagerAdapter; import com.me.view.SimpleViewPagerIndicator; public class MainActivity extends FragmentActivity { private Context context; private String[] titles = new String[] { "第1页", "第2页", "第3页", "第4页" }; private SimpleViewPagerIndicator indicator; private ViewPager viewpager; private FragmentPagerAdapter pagerAdapter; private TabFragment[] fragments = new TabFragment[titles.length]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context = this; initViews(); } private void initViews() { for (int i = 0; i < titles.length; i++) { fragments[i] = (TabFragment) TabFragment.newInstance(titles[i]); } pagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public int getCount() { return titles.length; } @Override public Fragment getItem(int position) { return fragments[position]; } }; viewpager = (ViewPager) findViewById(R.id.viewpager); viewpager.setAdapter(pagerAdapter); indicator = (SimpleViewPagerIndicator) findViewById(R.id.indicator); indicator.setTitles(titles); indicator.setViewPager(viewpager); indicator.setCurrentItem(1); // indicator.setOnPageChangeListener(new SimpleViewPagerIndicator.OnPageChangeListener() // { // // @Override // public void onPageSelected(int position) // { // // TODO Auto-generated method stub // Toast.makeText(context, position + " clicked", Toast.LENGTH_SHORT).show(); // } // }); } }
注意:使用了SimpleViewPagerIndicator之后,需要使用indicator.setOnPageChangeListener(...)监听页面的切换,不要再使用viewpager .setOnPageChangeListener(...)设置了。
最后是个Fragment:
package com.example.testviewpagerindicator; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class TabFragment extends Fragment { public static final String TITLE = "title"; private String mTitle = "Defaut Value"; private TextView mTextView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mTitle = getArguments().getString(TITLE); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_tab, container, false); mTextView = (TextView) view.findViewById(R.id.id_info); mTextView.setText(mTitle); return view; } public static TabFragment newInstance(String title) { TabFragment tabFragment = new TabFragment(); Bundle bundle = new Bundle(); bundle.putString(TITLE, title); tabFragment.setArguments(bundle); return tabFragment; } }
主布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.example.testviewpagerindicator" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.me.view.SimpleViewPagerIndicator android:id="@+id/indicator" android:layout_width="match_parent" android:layout_height="48dp" android:background="#ffffffff" /> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" android:flipInterval="30" android:persistentDrawingCache="animation" /> </LinearLayout>
https://github.com/ogaclejapan/SmartTabLayout
http://www.open-open.com/lib/view/open1426474795101.html
一个带有回弹效果的ViewPager,这个类具体见:
http://gundumw100.iteye.com/blog/1775588
Android 高仿微信6.0主界面 带你玩转切换图标变色
http://blog.csdn.net/lmj623565791/article/details/41087219
Android 自定义控件玩转字体变色 打造炫酷ViewPager指示器
http://blog.csdn.net/lmj623565791/article/details/44098729
Android 教你打造炫酷的ViewPagerIndicator 不仅仅是高仿MIUI
http://blog.csdn.net/lmj623565791/article/details/42160391
Android TabLayout 库:FlycoTabLayout
http://www.open-open.com/lib/view/open1447294190257.html
- TestViewPagerIndicator.rar (2.2 MB)
- 下载次数: 26
发表评论
-
工具类之FragmentUtils
2017-04-01 11:37 1723fragment应该是广大Android开发者都用到过的一个v ... -
左中右结构的行布局
2016-12-19 21:35 1184最近项目要开发一个新版本,发现项目中许多布局大致都相同改动不大 ... -
RecyclerView:带header&footer&加载更多
2015-09-09 16:24 2966接上一篇 由简到繁,循序渐进 实现了: 0,点击&长按 ... -
RecyclerView:带header和footer的grid
2015-09-09 13:47 3044知道原理后,为RecyclerView实现同时带header和 ... -
RecyclerView:带header的grid
2015-09-09 13:01 2430RecyclerView是一个高度可定制性的View 本文将使 ... -
iconify使用文本替换icon测试
2015-08-28 17:12 1690源项目地址 https://github.com/JoanZa ... -
快速上传头像到服务端工具类FaceUtil
2015-07-12 14:22 3075快速迭代用 import java.io.DataOut ... -
HorizontalScrollView+RadioGroup+ViewPager+FragmentPagerAdapter基本结构
2015-07-12 13:56 3293快速迭代用 import java.util.Arr ... -
LoadMoreListView+SwipeRefreshLayout(分页下拉)基本结构
2015-07-12 13:07 4153一切为了快速迭代 import java.util. ... -
RadioButton+ViewPager+FragmentPagerAdapter快速搭建页面结构
2015-07-12 11:08 2561一切为了快速开发 开发类似界面 import and ... -
为ViewPager设置CirclePageIndicator(小圆点)
2015-07-03 16:54 15326一切为了快速迭代! import android.con ... -
简单实现可以多选的ProductListDialog<T>
2015-06-25 22:33 1256只是一个范例,是为了代码快速迭代而写的 使用了listView ... -
基于上一篇写的SimplePairListPopupWindow<F,S>
2015-06-19 11:15 1534这次使用Pair<F,S>实现一个简单的Simpl ... -
基于上一篇实现的SimpleListPopupWindow<T>
2015-06-19 11:11 1517这次是个简单的PopupWindow,快速迭代用。 imp ... -
实现一个快速简单的SimpleListDialog<T>
2015-06-19 10:59 1744我写这样的文章都是为了快速迭代,所以都写的比较简单,谅解 此 ... -
一个典型的从下部弹上来的Dialog
2014-12-05 14:47 6071典型的看图 import android.app ...
相关推荐
动态设置View的宽高(设置ViewPager的高度) 利用ViewPager显示banner的时候,一些人会直接写死ViewPager高度,比如在xml布局里面直接写成180dp。 本例在代码中动态设置ViewPager的高度,让他的高度始终和高度呈...
Viewpager setOffscreenPageLimit(0) 无效 至少会缓存一页 使用此viewpage 代替原生 的 之后设置setOffscreenPageLimit(0) 可不缓存
3. 在 Activity 中实例化 ViewPager 并将 Adapter 设置给它 知识点二:PagerAdapter 的实现 PagerAdapter 是 ViewPager 的核心组件,负责提供要展示的内容。它有四个主要方法: 1. instantiateItem():创建一个新...
(由于第一次上传的资源文件,代码被加密了,因此重新上传一份未加密的)整个实现用的是TabPageIndicator + ViewPager ,现在的要求是上面的TabPageIndicator 和 下面的 ...要保持能滑动)以及ViewPager是否可以滑动。
5. **轮播图实现**:为了实现自动轮播,通常需要在Activity或Fragment的生命周期中设置一个定时器(Timer或Handler的postDelayed),每隔一定时间切换到下一个页面。同时,需要处理好轮播的边界情况,比如当达到最后...
在这个例子中,`MIN_VELOCITY`和`MAX_VELOCITY`是你定义的最小和最大滑动速度值,可以根据需求进行设置。 接下来,我们讨论如何通过按钮实现页面的滑动。在Android中,我们可以使用`ViewPager`的`setCurrentItem()`...
此外,也可以通过设置`ViewPager`的offscreenPageLimit属性来控制预加载页面的数量,减少不必要的加载和高度计算。 通过以上步骤,我们可以实现根据网络图片高度动态设置`ViewPager`高度的功能。这不仅可以提高用户...
ViewPager是Android平台上一个强大...通过掌握ViewPager的基本使用和自定义适配器,你可以轻松地为应用添加丰富的交互效果。实践是检验真理的唯一标准,尝试在你的项目中运用这些知识,你将对ViewPager有更深入的理解。
2. **OffscreenPageLimit**:这是设置预加载页面数量的属性,决定ViewPager会提前加载多少个相邻页面。默认值为1,但可以根据需求调整以优化用户体验。 3. **PageTransformer**:这是实现自定义滑动动画的关键。...
IndicatorBar是一个轻量级的Android库,专门为ViewPager设计,提供了一种简单的方式来创建自定义的指示器。在使用IndicatorBar之前,确保已经在项目的build.gradle文件中添加了对应的依赖。例如: ```groovy ...
Android ViewPager实现仿QQ多页面滑动切换以及动画效果
在实际项目中,我们可以创建一个示例应用,包含一个使用`InfinitePagerAdapter`的ViewPager,并设置一个包含多个页面的布局。每个页面可以是一个简单的TextView或者ImageView,以展示不同的内容。通过运行这个示例...
总结,实现一个带有无限轮播和点击事件的ViewPager,需要自定义PagerAdapter、设置`offscreenPageLimit`属性、为item设置点击事件以及可能的页面变换动画。通过这样的方式,我们可以创建一个高效且交互丰富的Android...
自定义viewpager解决scrollview嵌套viewpager不显示和高度自适应
通过SlidingMenu+Viewpager实现当前最流行的侧滑 通过SlidingMenu库与Fragment来实现当前最为流行的侧滑模式。其实涉及到的知识点有: 1.SlidingMenu 2.Fragment 通过layout构建一个Fragment 通过preference 来...
本示例“ScrollView嵌套ViewPager,可滑动,可动态设置ViewPager高度”就巧妙地解决了这两个组件的结合问题。 首先,让我们详细了解一下ScrollView。ScrollView是一个可滚动的视图容器,它只允许垂直方向的滚动。当...
1. 创建一个自定义的ViewPager类,继承自Android提供的`android.support.v4.view.ViewPager`(如果使用AndroidX库,则为`androidx.viewpager.widget.ViewPager`)。 2. 在自定义的ViewPager类中,我们需要覆盖`...
在布局文件中添加`ViewPager`,并为其设置适配器。适配器通常是一个继承自`PagerAdapter`的类,其中重写`instantiateItem()`和`destroyItem()`方法,以便在`ViewPager`中创建和销毁页面。 ```xml <androidx....
4. 在Activity或Fragment中初始化ViewPager,设置适配器,并为ViewPager添加PageChangeListener来处理页面切换事件。 5. 自定义标题条的布局和逻辑,确保在页面切换时能正确更新标题。 通过这个示例,开发者可以...