`
yunlonglove
  • 浏览: 225955 次
社区版块
存档分类
最新评论

android viewpager 滑动分页以及禁止划屏 (模拟新浪)

 
阅读更多

在第一篇中,我介绍了ViewPager的应用以及禁用滑向下一页.

这一篇将之加工一下,模拟实现新浪里面的功能,vierpager 分页.

在新浪微博消息一栏中是这样的(注意看title):

上部分页栏可以用gridview来实现,不过为了省事在这就用textview代替了.

贴出代码:

/***
 * ViewPager
 * 
 * @author zhangjia
 * 
 */
public class MainActivity extends ActivityGroup implements OnClickListener {
	private LinearLayout layout;// title
	private ViewPager pager;
	private ArrayList<View> pageViews;
	private LinearLayout layout2;
	private ArrayList<ImageView> imageViews;
	private LinearLayout linearLayout;
	private String title[] = { "one", "two", "three" };
	private TextView textView;
	private ArrayList<View> arrayList;// 用于装载view
	private final int linerlayout_height = 80;

	/***
	 * init title and pageview
	 */
	void Init() {
		arrayList = new ArrayList<View>();
		// 获取屏幕宽度
		int width = getWindowManager().getDefaultDisplay().getWidth()
				/ title.length;
		for (int i = 0; i < title.length; i++) {
			textView = new TextView(this);
			textView.setText(title[i]);
			textView.setWidth(width);
			textView.setHeight(linerlayout_height - 10);
			textView.setTextSize(20);
			textView.setTextColor(color.black);
			textView.setGravity(Gravity.CENTER);
			textView.setId(i);
			textView.setPadding(5, 5, 5, 5);
			textView.setOnClickListener(this);
			linearLayout.addView(textView);
			arrayList.add(textView);
		}

		pageViews = new ArrayList<View>();
		View view00 = getLocalActivityManager().startActivity("activity01",
				new Intent(this, NullActivity.class)).getDecorView();
		View view01 = getLocalActivityManager().startActivity("activity01",
				new Intent(this, MainActivity1.class)).getDecorView();
		View view02 = getLocalActivityManager().startActivity("activity02",
				new Intent(this, MainActivity2.class)).getDecorView();
		View view03 = getLocalActivityManager().startActivity("activity02",
				new Intent(this, MainActivity3.class)).getDecorView();
		View view04 = getLocalActivityManager().startActivity("activity01",
				new Intent(this, NullActivity.class)).getDecorView();
		pageViews.add(view00);
		pageViews.add(view01);
		pageViews.add(view02);
		pageViews.add(view03);
		pageViews.add(view04);
	}

	void Init_Point() {
		imageViews = new ArrayList<ImageView>();
		ImageView imageView;
		for (int i = 0; i < pageViews.size(); i++) {
			imageView = new ImageView(this);
			imageView.setLayoutParams(new LayoutParams(5, 5));
			imageView.setBackgroundResource(R.drawable.d1);
			LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
					new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,
							LayoutParams.WRAP_CONTENT));
			layoutParams.leftMargin = 20;
			layoutParams.rightMargin = 20;
			layout2.addView(imageView, layoutParams);
			// 第一个和最后一个让她消失
			if (i == 0 || i == pageViews.size() - 1) {
				imageView.setVisibility(View.GONE);
			}
			if (i == 1) {
				imageView.setBackgroundResource(R.drawable.d2);
			}
			imageViews.add(imageView);

		}
	}

	public void draw_Point(int index) {
		for (int i = 1; i < imageViews.size(); i++) {

			if (index == i) {
				imageViews.get(i).setBackgroundResource(R.drawable.d2);
			} else
				imageViews.get(i).setBackgroundResource(R.drawable.d1);

		}

	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setTitle("jjhappyforever...");
		setContentView(R.layout.main);
		pager = (ViewPager) findViewById(R.id.vp_contains);
		layout2 = (LinearLayout) findViewById(R.id.iv_image);
		linearLayout = (LinearLayout) findViewById(R.id.mian);
		// 创建linerlayout的大小
		LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
				new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,
						LayoutParams.FILL_PARENT));
		layoutParams.height = linerlayout_height;
		linearLayout.setLayoutParams(layoutParams);

		Init();
		Init_Point();
		pager.setAdapter(new myPagerView());

		arrayList.get(0).setBackgroundResource(
				R.drawable.renren_sdk_pay_repair_btn_down);
		pager.setCurrentItem(1);

		pager.setOnPageChangeListener(new OnPageChangeListener() {
			@Override
			public void onPageSelected(int arg0) {
				draw_Point(arg0);// 描绘分页点,一定要写在这里.

				// Toast.makeText(MainActivity.this, ""+arg0, 1000).show();
				// 如果是第一屏或者是最后一屏禁止滑动,其实这里实现的是如果滑动的是第一屏则跳转至第二屏,如果是最后一屏则跳转到倒数第二屏.
				if (arg0 == imageViews.size() - 1 || arg0 == 0) {
					if (arg0 == 0) {
						pager.setCurrentItem(arg0 + 1);// 第二屏 会再次实现该回调方法实现跳转.
						imageViews.get(1).setBackgroundResource(R.drawable.d2);
					} else {
						pager.setCurrentItem(arg0 - 1);// 倒数第二屏
						imageViews.get(arg0 - 1).setBackgroundResource(
								R.drawable.d2);
					}
				} else {
					//一定要卸载else里面,viewpager挺变态的,写在外面,(在你在最左边往左拉的时候会执行两次,最右边也是.)
					setBackgroud(arg0 - 1);
					Toast.makeText(MainActivity.this, "" + arg0, 1000).show();
				}
			}

			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {

			}

			@Override
			public void onPageScrollStateChanged(int arg0) {

			}
		});
	}
    /***
     * 对title 选项卡处理
     * @param index
     */
	public void setBackgroud(int index) {
		for (int i = 0; i < arrayList.size(); i++) {
			
			arrayList.get(i).setBackgroundDrawable(new BitmapDrawable());

			if (i == index)
				arrayList.get(index).setBackgroundResource(
						R.drawable.renren_sdk_pay_repair_btn_down);
		}

	}
    /***
     * viewpager 的数据源
     * @author zhangjia
     *
     */
	class myPagerView extends PagerAdapter {
		// 显示数目
		@Override
		public int getCount() {
			return pageViews.size();
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == arg1;
		}

		@Override
		public int getItemPosition(Object object) {
			// TODO Auto-generated method stub
			return super.getItemPosition(object);
		}

		@Override
		public void destroyItem(View arg0, int arg1, Object arg2) {
			// TODO Auto-generated method stub
			((ViewPager) arg0).removeView(pageViews.get(arg1));
		}

		/***
		 * 获取每一个item, 类于listview中的getview
		 */
		@Override
		public Object instantiateItem(View arg0, int arg1) {
			((ViewPager) arg0).addView(pageViews.get(arg1));
			return pageViews.get(arg1);
		}

	}
    /***
     * 点击事件
     */
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case 0:
			setBackgroud(0);
			pager.setCurrentItem(1);
			break;
		case 1:
			setBackgroud(1);
			pager.setCurrentItem(2);
			break;
		case 2:
			setBackgroud(2);
			pager.setCurrentItem(3);
			break;

		default:
			break;
		}
	}
}
上面就是所有的代码,其实看起来有点小多,不过都挺容易理解的.还有就是前面我写过一片关于viewpager的介绍,这里也就不过多讲解了.详细请下载源码看吧.

样本示例:

第一屏左垃 第一屏 滑向第二屏


第二屏 第三屏 第三屏右拉(会缩回)

源码下载




分享到:
评论

相关推荐

    VB学生档案管理系统设计与实现.rar

    计算机专业毕业设计VB精品论文资源

    debugpy-1.6.3-cp37-cp37m-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于ssm的学生宿舍报修管理系统

    开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我v:19306446185 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有! https://img-blog.csdnimg.cn/direct/e73dc0ac8d27434b86d886db5a438c71.jpeg

    cryptography-42.0.1-cp37-abi3-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    sja1300.x86_64.tar.gz

    SQLyong 各个版本,免费下载 SQLyog是业界著名的Webyog公司出品的一款简洁高效、功能强大的图形化MySQL数据库管理工具。使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库。

    rwrewrewdfg

    dfgdfg

    基于Vue2的在线租车前台设计源码

    本项目是基于Vue2的在线租车前台设计源码,包含75个文件,其中包括27个Vue文件、20个PNG图像文件、16个JavaScript文件、3个JSON配置文件、3个SCSS样式文件、2个JPG图像文件、1个Gitignore文件、1个Markdown文档、1个ICO图标文件和1个HTML文件。系统专注于提供在线租车功能,支持车辆展示、租赁流程等功能,为用户提供了一个稳定、高效的在线租车平台。

    虚拟机下Ubuntu上网设置_ubuntu虚拟机怎么连接网络-CSDN博客.mhtml

    虚拟机下Ubuntu上网设置_ubuntu虚拟机怎么连接网络-CSDN博客.mhtml

    VB通讯录系统设计与实现(源代码+系统).rar

    计算机专业毕业时间之VB精品论文源代码资源

    labview使用DAQ采集数据时显示设备标识符无效

    当安装好NI-DAQmx后仍然无法运行采集程序,并且显示显示设备标识符无效,则需要添加虚拟采集设备。

    debugpy-1.6.3-cp39-cp39-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    20231108陈震浩《Python程序设计》实验四报告

    20231108陈震浩《Python程序设计》实验四报告

    源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip

    源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip 源代码-Flash+JS图片切换轮换特效ASP读取数据库版.zip

    grpcio-1.48.0-cp36-cp36m-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    二层独栋别墅钢混结构同一个梦别墅施工图.dwg

    二层独栋别墅钢混结构同一个梦别墅施工图.dwg

    VB校园一卡通管理系统(源代码+系统).rar

    计算机专业毕业时间之VB精品论文源代码资源

    Java项目之基于jsp医院预约挂号系统演示(源码 + 演示视频)

    Java项目之基于jsp医院预约挂号系统演示(源码 + 演示视频) 开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea

    grpcio-1.3.5-cp35-cp35m-linux_armv7l.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    CH04 整流变换电路仿真.ppt

    PSIM开关电源原理方针

    VB期刊信息管理系统(论文+源代码+答辩PPT).rar

    计算机专业毕业设计VB精品论文资源

Global site tag (gtag.js) - Google Analytics