Android使用ViewPager实现类似laucher左右拖动效果

现在很多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, 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());
 } 

 /** 指引页面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左右拖动

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android编程实现图标拖动效果的方法

    本文实例讲述了Android编程实现图标拖动效果的方法.分享给大家供大家参考,具体如下: 最近优化图标拖动时的速率,稍微有一点点效果,直接把代码贴出来,有兴趣一起讨论的朋友可以给我留言. 代码如下: DragView.java package com.android.dragtest; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.

  • Android实现跟随手指拖动并自动贴边的View样式(实例demo)

    效果图 代码 /** * 根据手指拖动的当前位置,自动贴边的View */ public class DragView extends ImageView implements View.OnTouchListener{ private int screenWidth; private int screenHeight; private Context mContext; private int lastX, lastY; private int left ,top; private ViewG

  • Android编程实现图片的浏览、缩放、拖动和自动居中效果

    本文实例讲述了Android编程实现图片的浏览.缩放.拖动和自动居中效果的方法.分享给大家供大家参考,具体如下: Touch.java /** * 图片浏览.缩放.拖动.自动居中 */ public class Touch extends Activity implements OnTouchListener { Matrix matrix = new Matrix(); Matrix savedMatrix = new Matrix(); DisplayMetrics dm; ImageVie

  • Android实现ImageView图片缩放和拖动

    今天我们来编写一个缩放效果的ImageView ,网上有很多人都讲了这些.但有许多人都直接使用了库文件, 那么我们今天做的是直接上代码编写一个拖动和缩放的ImageView,具体看效果图 那么简单了分析一下.在手机上缩放图片和拖动要用到什么?手指对不对 那么控件上什么事件和手机有关.View.OnTouchListener 对不对. ok,那么先新建一个Class ··· public class BaseDragZoomImageView extends ImageView implement

  • android 添加随意拖动的桌面悬浮窗口

    用过新版本android 360手机助手都人都对 360中只在桌面显示一个小小悬浮窗口羡慕不已吧? 其实实现这种功能,主要有两步: 1.判断当前显示的是为桌面.这个内容我在前面的帖子里面已经有过介绍,如果还没看过的赶快稳步看一下哦. 2.使用windowManager往最顶层添加一个View .这个知识点就是为本文主要讲解的内容哦.在本文的讲解中,我们还会讲到下面的知识点: a.如果获取到状态栏的高度 b.悬浮窗口的拖动 c.悬浮窗口的点击事件 有开始之前,我们先来看一下效果图:  接下来我们来

  • Android 可拖动的seekbar自定义进度值

    最近接了个项目其中有需要要实现此功能:seekbar需要显示最左和最右值,进度要跟随进度块移动.下面通过此图给大家展示下效果,可能比文字描述要更清晰. 其实实现起来很简单,主要是思路.自定义控件的话也不难,之前我的博客也有专门介绍,这里就不再多说. 实现方案 这里是通过继承seekbar来自定义控件,这样的方式最快.主要难点在于进度的显示,其实我很的是最笨的方法,就是用了一个popwindow显示在进度条的上方,然后在移动滑块的时候实时的改变它显示的横坐标.看进度显示的核心代码: private

  • Android编程之控件可拖动的实现方法

    本文实例讲述了Android编程之控件可拖动的实现方法.分享给大家供大家参考,具体如下: 点击和触摸的区别是什么? 点击: 一组动作的集合 手指按下着按钮 手指要在按钮停留一段时间 手指离开按钮 private static final String TAG = "DragViewActivity"; private ImageView iv_dv_view; private TextView tv_drag_view; private int startx; private int

  • Android自定义View实现拖动选择按钮

    本文为大家分享了Android实现拖动选择按钮的具体代码,供大家参考,具体内容如下 效果图 View代码 第一步:自定义属性 <declare-styleable name="DragView"> <attr name="icon_drag" format="reference"/> <attr name="color_circle" format="color"/> &

  • 在android中实现类似uc和墨迹天气的左右拖动效果

    复制代码 代码如下: import android.app.Activity; import android.os.Bundle; import android.content.Context; import android.graphics.Color; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import a

  • Android 仿淘宝、京东商品详情页向上拖动查看图文详情控件DEMO详解

    一.淘宝商品详情页效果 我们的效果 二.实现思路 使用两个scrollView,两个scrollView 竖直排列,通过自定义viewGroup来控制两个scrollView的竖直排列,以及滑动事件的处理.如下图 三.具体实现 1.继承viewGroup自定义布局View 重写onMeasure()和onLayout方法,在onLayout方法中完成对两个子ScrollView的竖直排列布局,代码如下: 布局文件: <RelativeLayout xmlns:android="http:/

随机推荐