600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 程序猿媛:滑动翻页+区域点击事件

程序猿媛:滑动翻页+区域点击事件

时间:2022-07-04 04:28:37

相关推荐

程序猿媛:滑动翻页+区域点击事件

Android GridView

滑动翻页+区域点击事件

如有转载,请保留原文地址:“/LuoYer/p/3409988.html”,谢谢!

声明:博文为原创,文章内容为,效果展示,思路阐述,及代码片段。文尾附注源码获取途径。

程序猿媛 系统博文,发表在 /gluoyer/blog,欢迎!

本文介绍了,利用GrideView的扩展,结合ViewPager设置FragmentPagerAdapter,实现如下功能:

九宫格样式显示列表项,可左右滑动切换页面;点击空白区域,显示和隐藏悬浮内容。

首先,看下实现效果:

九宫格样式显示列表,左右滑动切换页面

九宫格样式,自然想到GrideView;而左右滑动切换,又是ViewPager的强项。此例结合了这两者来实现。

ViewPager的内容可以设置FragmentPagerAdapter,即:每一项都可以是一个Fragment。再为每个Fragment设置一个包含3x3的GrideView,就是功能实现的基础。

代码实现了ChapterAdapter,继承字FragmentPagerAdapter:

1 public class ChapterAdapter extends FragmentPagerAdapter{ 2public final static int CHAPTER_PAGE_NUM = 9; 3private ArrayList<Fragment> mFragments; 45public ChapterAdapter(FragmentManager fm, ArrayList<ArrayList<String>> arrayLists) { 6 super(fm); 7 mFragments = new ArrayList<Fragment>(); 8 int startPos = 0; // count the click offset 9 for(ArrayList<String>list : arrayLists) {10 mFragments.add(ChapterFragment.getNewInstance(startPos * CHAPTER_PAGE_NUM, list));11 startPos ++;12 }13}14 }

ChapterAdapter

并在其间创建并保存了每个页面的ChapterFragment。

ChapterFragment中,定义了GetView的ChapterGvAdapter,以及点击事件监听onChapterPageClickListener:用于屏蔽自身点击事件,以及后续将要介绍的,显示和隐藏悬浮内容的空白处点击事件。

1 public class ChapterFragment extends Fragment { 2public void onCreate(Bundle savedInstanceState) { 3 // 这里很重要,填充空白内容 4 if(mNameList.size() < ChapterAdapter.CHAPTER_PAGE_NUM) { 5 for(int i=mNameList.size(); 6 i<ChapterAdapter.CHAPTER_PAGE_NUM; i++) { 7 mNameList.add(null); 8 } 9 }10private class ChapterGvAdapter extends BaseAdapter {11 // 稍后介绍12}13 // 各项及空白处点击事件监听14 public interface onChapterPageClickListener {15 public abstract void onChapterItemClick(int position, String name);16 public abstract void onChapterSpaceClick();17}18 }

ChapterFragment

其中,onCreate中,填充空白处很重要,请注意了解。因为,不可能保证每页恰好9项内容,所以,添加特殊的null内容,在添加View的时候,设置其点击事件,避免点击无响应的情况。

点击空白区域,显示和隐藏悬浮内容

此部分功能,关键部分为:

1.布局文件嵌套空白区域;

2.ChapterGvAdapter的getView中设置事件监听。

一、布局文件嵌套空白区域

1 <LinearLayout 2android:layout_width="match_parent" 3android:layout_height="match_parent" 4android:paddingLeft="16dip" 5android:paddingRight="16dip" 6android:paddingTop="20dip" 7android:paddingBottom="20dip" 8android:gravity="center" >9<LinearLayout10 android:id="@+id/cpt_gv_item_select_region"11 android:clickable="true" >12 <!-- set default background, to hold the sapce for empty item -->13 <ImageView14 android:id="@+id/cpt_gv_item_img"15 android:src="@drawable/ic_launcher"/> 16 <TextView17 android:id="@+id/cpt_gv_item_name" />18</LinearLayout>19 </LinearLayout>

chapter_gridview_item.xml

可以看到,最外层的LinearLayout(L1)设置了padding属性。将cpt_gv_item_select_region的LinearLayout(L2)代表的实际内容区域的范围压缩。

这样,我们设置了L1L2的点击事件之后,点击在L2区域,就触发了L2的点击事件,处理onChapterItemClick事件,模拟GrideView项点击事件;而点击在L1的padding区域,就触发了L1的点击事件,去处理onChapterSpaceClick事件,就是增加的空白区域点击事件响应了。

二、ChapterGvAdapter的getView中设置事件监听

1 private class ChapterGvAdapter extends BaseAdapter { 2public View getView(final int position, View convertView, ViewGroup parent) { 3// shadow the default GridView item click event 4convertView.setOnClickListener(new OnClickListener() { 5 @Override 6 public void onClick(View v) { 7 mClickListener.onChapterSpaceClick(); 8 } 9});10// Has content, set its click listener11if(null != mNameList.get(position)) {12 holder.mSelectRegion.setOnClickListener(new OnClickListener() {13 @Override14 public void onClick(View v) {15 mClickListener.onChapterItemClick(mStartPos + position, mNameList.get(position));16 }17 });18 Utils.setVisible(holder.mSelectRegion);19 holder.mName.setText(mNameList.get(position));20}21// no content, do the same as convertView do.22// if not set this listener, click no content space will no response.23else {24 holder.mSelectRegion.setOnClickListener(new OnClickListener() {25 @Override26 public void onClick(View v) {27 mClickListener.onChapterSpaceClick();28 }29 });30 Utils.setInvisible(holder.mSelectRegion);31}32// Default image, do transfer and set what your want, like i set name upside.33holder.mIcon.setImageResource(R.drawable.ic_launcher);34return convertView;35}36 }

ChapterGvAdapter

代码中,可以比较明确的看到,各个区域监听事件的设置情况。

至此,主要思路阐述完毕,悬浮内容的显示和隐藏,在空白区域点击事件中进行处理。内容的实现请查看源码,不赘述,谢谢阅读!

因为涉及到后续的更新,为了方便源码的管理和更新,采取了应用的方式来获取源码,保证可用。

源码请于以下途径获取“/netdisk/download.php?id=21a861dbceca3ee79e1afa0341fa3f04fa”。

获取成功及压缩文件打开如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。