现在很多AndroID应用在首次安装完都会有指引如何使用该应用的某些功能的指引界面,这样会获得很好的用户体验,能够帮助用户更好使用应用的某些功能。其实该功能和AndroID主界面的 luncher 的功能完全一样的效果,可以实现左右拖动。
下面结合 VIEwPager 的实例来展示如何实现该功能,先看下该Demo的结构图:
注:VIEwPager类是实现左右两个屏幕平滑地切换的一个类,是由Google 提供的, 使用VIEwPager首先需要引入androID-support-v4.jar这个jar包。其中工程项目中的 libs 文件夹下存放着 androID-support-v4.jar这个jar包。drawable文件夹下包含有图片资源文件。
以下是工程中各个文件的源码:
main.xml源码:
<?xml version="1.0" enCoding="utf-8"?> <FrameLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:orIEntation="vertical" > <androID.support.v4.vIEw.VIEwPager androID:ID="@+ID/guIDePages" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content"/> <relativeLayout androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:orIEntation="vertical" > <linearLayout androID:ID="@+ID/vIEwGroup" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:layout_alignParentBottom="true" androID:layout_marginBottom="30dp" androID:gravity="center_horizontal" androID:orIEntation="horizontal" > </linearLayout> </relativeLayout> </FrameLayout>
item01.xml源码:
<?xml version="1.0" enCoding="utf-8"?> <linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:orIEntation="vertical" > <ImageVIEw androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:background="@drawable/feature_guIDe_0" > </ImageVIEw> </linearLayout>
其中item02.xml,item03.xml,item04.xml布局文件的源码和item01.xml布局文件一样,只是 ImageVIEw 中的 androID:background 属性的背景图片不同而已。
GuIDeVIEwDemoActivity.java 源码:
package com.andyIDea.guIDedemo; import java.util.ArrayList; import androID.app.Activity; import androID.os.Bundle; import androID.os.Parcelable; import androID.support.v4.vIEw.PagerAdapter; import androID.support.v4.vIEw.VIEwPager; import androID.support.v4.vIEw.VIEwPager.OnPagechangelistener; import androID.vIEw.LayoutInflater; import androID.vIEw.VIEw; import androID.vIEw.VIEwGroup; import androID.vIEw.VIEwGroup.LayoutParams; import androID.vIEw.Window; import androID.Widget.ImageVIEw; public class GuIDeVIEwDemoActivity extends Activity { private VIEwPager vIEwPager; private ArrayList<VIEw> pageVIEws; private VIEwGroup main,group; private ImageVIEw imageVIEw; private ImageVIEw[] imageVIEws; /** Called when the activity is first created. */ @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestwindowFeature(Window.FEATURE_NO_Title); LayoutInflater inflater = getLayoutInflater(); pageVIEws = new ArrayList<VIEw>(); pageVIEws.add(inflater.inflate(R.layout.item01,null)); pageVIEws.add(inflater.inflate(R.layout.item02,null)); pageVIEws.add(inflater.inflate(R.layout.item03,null)); pageVIEws.add(inflater.inflate(R.layout.item04,null)); imageVIEws = new ImageVIEw[pageVIEws.size()]; main = (VIEwGroup)inflater.inflate(R.layout.main,null); // group是R.layou.main中的负责包裹小圆点的linearLayout. group = (VIEwGroup)main.findVIEwByID(R.ID.vIEwGroup); vIEwPager = (VIEwPager)main.findVIEwByID(R.ID.guIDePages); for (int i = 0; i < pageVIEws.size(); i++) { imageVIEw = new ImageVIEw(GuIDeVIEwDemoActivity.this); imageVIEw.setLayoutParams(new LayoutParams(20,20)); imageVIEw.setpadding(20,20,0); imageVIEws[i] = imageVIEw; if (i == 0) { //默认选中第一张图片 imageVIEws[i].setBackgroundResource(R.drawable.page_indicator_focused); } else { imageVIEws[i].setBackgroundResource(R.drawable.page_indicator); } group.addVIEw(imageVIEws[i]); } setContentVIEw(main); vIEwPager.setAdapter(new GuIDePageAdapter()); vIEwPager.setonPagechangelistener(new GuIDePagechangelistener()); } /** 指引页面Adapter */ class GuIDePageAdapter 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)); } @OverrIDe public Object instantiateItem(VIEw arg0,int arg1) { // Todo auto-generated method stub ((VIEwPager) arg0).addVIEw(pageVIEws.get(arg1)); return pageVIEws.get(arg1); } @OverrIDe public voID restoreState(Parcelable arg0,ClassLoader arg1) { // Todo auto-generated method stub } @OverrIDe public Parcelable saveState() { // Todo auto-generated method stub return null; } @OverrIDe public voID startUpdate(VIEw arg0) { // Todo auto-generated method stub } @OverrIDe public voID finishUpdate(VIEw arg0) { // Todo auto-generated method stub } } /** 指引页面改监听器 */ class GuIDePagechangelistener implements OnPagechangelistener { @OverrIDe public voID onPageScrollStateChanged(int arg0) { // Todo auto-generated method stub } @OverrIDe public voID onPageScrolled(int arg0,float arg1,int arg2) { // Todo auto-generated method stub } @OverrIDe public voID onPageSelected(int arg0) { for (int i = 0; i < imageVIEws.length; i++) { imageVIEws[arg0] .setBackgroundResource(R.drawable.page_indicator_focused); if (arg0 != i) { imageVIEws[i] .setBackgroundResource(R.drawable.page_indicator); } } } } }
运行上面的程序,效果截图如下:
至此大功告成,已经采用VIEwPager组件实现了左右滑动(拖动)效果。
源码下载:Android实现类似laucher左右拖动
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
您可能感兴趣的文章:android 添加随意拖动的桌面悬浮窗口Android 仿淘宝、京东商品详情页向上拖动查看图文详情控件DEMO详解Android 可拖动的seekbar自定义进度值Android编程之控件可拖动的实现方法Android编程实现图标拖动效果的方法Android实现ImageView图片缩放和拖动Android自定义View实现拖动选择按钮Android编程实现图片的浏览、缩放、拖动和自动居中效果Android实现跟随手指拖动并自动贴边的View样式(实例demo)在android中实现类似uc和墨迹天气的左右拖动效果 总结以上是内存溢出为你收集整理的Android使用ViewPager实现类似laucher左右拖动效果全部内容,希望文章能够帮你解决Android使用ViewPager实现类似laucher左右拖动效果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)