当前位置:  编程技术>移动开发

如何在Android中实现左右滑动的指引效果

    来源: 互联网  发布时间:2014-10-18

    本文导语:  本文的目的是要实现左右滑动的指引效果。那么什么是指引效果呢?现在的应用为了有更好的用户体验,一般会在应用开始显示一些指引帮助页面,使用户能更好的理解应用的功能,甚至是一些新闻阅读器会把一些头条新闻以...

本文的目的是要实现左右滑动的指引效果。那么什么是指引效果呢?现在的应用为了有更好的用户体验,一般会在应用开始显示一些指引帮助页面,使用户能更好的理解应用的功能,甚至是一些新闻阅读器会把一些头条新闻以指引效果的形式显示。说个最基本的,就是我们的手机主屏幕就是这种效果。

下面我们就开始实现我们的左右滑动指引效果。为了大家更好的理解,我们先看下实现效果,
如下图所示:


 

 

  

 

在这里,我们需要用到google提到的一个包——android-support-v4.jar,这个包包含了一些非常有用的类,其中就是ViewPager类来实现页面之间的切换操作,关于android-support-v4.jar的详细信息,大家可以访问google官方网站:http://developer.android.com/sdk/compatibility-library.html

首先我们先看下项目结构:

 

  

在上图项目结构中,我们需要首先引入android-support-v4.jar包。下面让我们看一下代码实现。
核心实现代码如下所示:

代码如下:

package com.test.guide;
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.Window;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
/**
 * Android实现左右滑动指引效果
 * @Description: Android实现左右滑动指引效果
 * @File: MyGuideViewActivity.java
 * @Package com.test.guide
 * @Author Hanyonglu
 * @Date 2012-4-6 下午11:15:18
 * @Version V1.0
 */
public class MyGuideViewActivity extends Activity {
     private ViewPager viewPager; 
     private ArrayList pageViews; 
     private ImageView imageView; 
     private ImageView[] imageViews;
     // 包裹滑动图片LinearLayout
     private ViewGroup main;
     // 包裹小圆点的LinearLayout
     private ViewGroup group;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 设置无标题窗口
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        LayoutInflater inflater = getLayoutInflater(); 
        pageViews = new ArrayList(); 
        pageViews.add(inflater.inflate(R.layout.item05, null));
        pageViews.add(inflater.inflate(R.layout.item06, null));
        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 = (ViewGroup)main.findViewById(R.id.viewGroup); 
        viewPager = (ViewPager)main.findViewById(R.id.guidePages); 

        for (int i = 0; i < pageViews.size(); i++) { 
            imageView = new ImageView(MyGuideViewActivity.this); 
            imageView.setLayoutParams(new LayoutParams(20,20)); 
            imageView.setPadding(20, 0, 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()); 
    }

    // 指引页面数据适配器
    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); 
                } 
            }
        } 
    } 
}

在以前的示例中,我们实现左右滑动效果时通常使用ViewFlipper来实现,在这个示例中我使用的Google的android-support-v4.jar中的ViewPager类实现。在这里,我创建了6个页面布局,也就是6个页面之间的切换。首先需要把这个6个布局页面加入到集合中以方便操作,如下代码:
代码如下:

LayoutInflater inflater = getLayoutInflater(); 
 pageViews = new ArrayList(); 
 pageViews.add(inflater.inflate(R.layout.item05, null));
 pageViews.add(inflater.inflate(R.layout.item06, null));
 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()];

通过for循环设置圆点图片的布局,如下代码:
代码如下:

for (int i = 0; i < pageViews.size(); i++) { 
            imageView = new ImageView(MyGuideViewActivity.this); 
            imageView.setLayoutParams(new LayoutParams(20,20)); 
            imageView.setPadding(20, 0, 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]); 
  }

然后再为ViewPager设置数据适配器和页面切换事件监听器,如下代码:
代码如下:

viewPager.setAdapter(new GuidePageAdapter()); 
viewPager.setOnPageChangeListener(new GuidePageChangeListener());

在指引页面数据适配器中要在回调函数中控制好页面的初始化及销毁操作等,具体看上面的代码。

  在指引页面更改事件监听器(GuidePageChangeListener)中要确保在切换页面时下面的圆点图片也跟着改变,如下代码:
代码如下:

@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); 
           } 
       }
}

下面是布局界面的代码,item.xml代码如下:
代码如下:



   
       

   

   

   
       
       
   
   

       
       
       
           

       

   
 

在最上方的导航是一个单独的布局,通过include标签引用。
代码如下:



说到这里了,有的朋友可能就要问了:你实现的效果很棒,那怎么样在界面上实现按钮或其它View的监听事件呢?对于这样一个问题,大家需要注意的是:不能直接使用findViewById()方法获取View。因为在加载布局界面时的代码是:
代码如下:

main = (ViewGroup)inflater.inflate(R.layout.main, null); 
setContentView(main);

而main.xml中没有我们设置的View,我们设置的View是在item01.xml或其它的布局中,所以应该使用如下代码设置view的监听事件:
代码如下:

View v1 = inflater.inflate(R.layout.item01, null);
tv1 = (TextView)v1.findViewById(R.id.textView1);
tv1.setOnClickListener(new TextView1OnClickListener());

此处我是以TextView为例,所以应该使用如上方法监听相应的View事件,还有一点需要说明的是:需要将上方子界面添加到集合中代码修改,将如下代码
代码如下:

pageViews.add(inflater.inflate(R.layout.item01, null)); 

修改为如下:
代码如下:

View v1 = inflater.inflate(R.layout.item01, null);
pageViews.add(v1); 

这样便可实现界面的上View的监听事件了。
以上便是在Android中实现左右滑动指引效果的步骤,当然还可以使用其它的方法来实现这种效果,有兴趣的朋友可以去网上查找相关资料,这里不再详述。

示例下载:点击下载带View的事件监听示例下载:点击下载

    
 
 

您可能感兴趣的文章:

  • Android中实现EditText圆角的方法
  • Android中实现HashMap排序的方法
  • Android中实现Runnable接口简单例子
  • Android自定义View设定到FrameLayout布局中实现多组件显示的方法 分享
  • Android中实现为TextView添加多个可点击的文本
  • Android中实现GPS定位的简单例子
  • Android中实现开机自动启动服务(service)实例
  • android中实现指针滑动的动态效果方法
  • 基于Android中实现定时器的3种解决方法
  • 解析Android中实现滑动翻页之ViewFlipper的使用详解
  • Android中实现地址栏输入网址能浏览该地址网页源码并操作访问网络
  • Android中实现多行、水平滚动的分页的Gridview实例源码
  • 如何在Android中实现渐显按钮的左右滑动效果
  • Android中实现可滑动的Tab的3种方式
  • 在android中实现类似uc和墨迹天气的左右拖动效果
  • 滑动刷新的ListView Android PullToRefresh
  • android滑动解锁震动效果的开启和取消
  • android Gallery组件实现的iPhone图片滑动效果实例
  • 安卓(Android)中如何实现滑动导航
  • android开发教程之实现滑动关闭fragment示例
  • android 左右滑动+索引图标实现方法与代码
  • Android滑动式菜单 SlidingMenu
  • Android控件之SlidingDrawer(滑动式抽屉)详解与实例分享
  • android 通过向viewpage中添加listview来完成滑动效果(类似于qq滑动界面)
  • Android实现左右滑动效果的方法详解
  • Android利用ViewPager实现滑动广告板实例源码
  • android配合viewpager实现可滑动的标签栏示例分享
  • android 九宫格滑动解锁开机实例源码学习
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 申请Android Map 的API Key(v2)的最新申请方式(SHA1密钥)
  • Android瀑布流实例 android_waterfall
  • Android开发需要的几点注意事项总结
  • Android系统自带样式 (android:theme)
  • android 4.0 托管进程介绍及优先级和回收机制
  • Android网络共享软件 Android Wifi Tether
  • Android访问与手机通讯相关类的介绍
  • Android 图标库 Android GraphView
  • Android及andriod无线网络Wifi开发的几点注意事项
  • 轻量级Android开发工具 Android Tools
  • Android 2.3 下StrictMode介绍
  • Android 开发环境 Android Studio
  • IDEA的Android开发插件 idea-android
  • Android手机事件提醒 Android Notifier
  • XBMC的Android客户端 android-xbmcremote
  • Android小游戏 Android Shapes
  • Android电池监控 Android Battery Dog
  • android开发:“android:WindowTitle”没有对应项no resource
  • Android 上类似IOS 的开关控件。 Android ToggleButton
  • Android 将 android view 的位置设为右下角的解决方法
  • Android 2D游戏引擎 Android Angle


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3