`
longgangbai
  • 浏览: 7330455 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android点击左右按钮实现左右滑动页面切换

阅读更多

       在android的图片的浏览时候经常使用。最近在网上查找资料自己也做一个如下:

 

 

package com.easyway.buttonpageflipper;

import com.easyway.buttonpageflipper.R;

import android.app.Activity;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ViewFlipper;

/**
 * Android实现带渐显按钮的左右滑动效果 自然状态下按钮不可见,触摸屏幕时显示按钮
 * 
 * @author longgangbai
 * 
 */
public class ButtonpageflipperActivity extends Activity implements OnGestureListener{
	// 声明两个按钮,分别代表向左和向右滑动
	private ImageView btnLeft = null;
	private ImageView btnRight = null;
	// 设置WindowManager
	private WindowManager wm = null;
	private WindowManager.LayoutParams wmParams = null;
	// ImageView的alpha值
	private int mAlpha = 0;
	private boolean isHide;
	private ViewFlipper viewFlipper = null;
	private GestureDetector detector;
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		setTitle("Android实现渐显按钮的左右滑动效果");
		viewFlipper = (ViewFlipper) this.findViewById(R.id.myViewFlipper);
		detector = new GestureDetector(this);
		// 初始化左右按钮
		initImageButtonView();
		viewFlipper.addView(addImageView(R.drawable.photo1));
		viewFlipper.addView(addImageView(R.drawable.photo2));
		viewFlipper.addView(addImageView(R.drawable.photo3));
		viewFlipper.addView(addImageView(R.drawable.photo4));
		viewFlipper.addView(addImageView(R.drawable.photo5));
	}
	 private View addImageView(int id) {
			ImageView iv = new ImageView(this);
			iv.setImageResource(id);
			return iv;
		}

	/**
	 * 初始化悬浮按钮
	 */
	private void initImageButtonView() {
		// 获取WindowManager
		wm = (WindowManager) getApplicationContext().getSystemService("window");
		// 设置LayoutParams相关参数
		wmParams = new WindowManager.LayoutParams();
		// 设置window type
		wmParams.type = LayoutParams.TYPE_PHONE;
		// 设置图片格式,效果为背景透明
		wmParams.format = PixelFormat.RGBA_8888;
		// 设置Window flag参数
		wmParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
				| LayoutParams.FLAG_NOT_FOCUSABLE;
		// 设置x、y初始值
		wmParams.x = 0;
		wmParams.y = 0;
		// 设置窗口长宽数据
		wmParams.width = 50;
		wmParams.height = 50;
		// 创建左右按钮
		createLeftButtonView();
		createRightButtonView();
	}

	/**
	 * 设置左边按钮
	 */
	private void createLeftButtonView() {
		btnLeft = new ImageView(this);
		btnLeft.setImageResource(R.drawable.left);
		btnLeft.setAlpha(0);
		btnLeft.setOnClickListener(new View.OnClickListener() {
			public void onClick(View arg0) {
				// 上一个图像
				viewFlipper.setInAnimation(ButtonpageflipperActivity.this,
						R.anim.push_left_in);
				viewFlipper.setOutAnimation(ButtonpageflipperActivity.this,
						R.anim.push_left_out);
				viewFlipper.showPrevious();
			}
		});
		// 调整窗口
		wmParams.gravity = Gravity.LEFT | Gravity.CENTER_VERTICAL;
		// 显示图像
		wm.addView(btnLeft, wmParams);
	}

	/**
	 * 设置右边按钮
	 */
	private void createRightButtonView() {
		btnRight = new ImageView(this);
		btnRight.setImageResource(R.drawable.right);
		btnRight.setAlpha(0);
		btnRight.setOnClickListener(new View.OnClickListener() {
			public void onClick(View arg0) {
				// 下一个图像
				viewFlipper.setInAnimation(ButtonpageflipperActivity.this,
						R.anim.push_right_in);
				viewFlipper.setOutAnimation(ButtonpageflipperActivity.this,
						R.anim.push_right_out);
				viewFlipper.showNext();
				
			}
		});
		// 调整窗口
		wmParams.gravity = Gravity.RIGHT | Gravity.CENTER_VERTICAL;
		// 显示图像
		wm.addView(btnRight, wmParams);
	}

	/**
	 * 设置按钮渐显效果
	 */
	private Handler mHandler = new Handler() {
		public void handleMessage(Message msg) {
			if (msg.what == 1 && mAlpha < 255) {
				// 通过设置不透明度设置按钮的渐显效果
				mAlpha += 50;
				if (mAlpha > 255)
					mAlpha = 255;
				btnLeft.setAlpha(mAlpha);
				btnLeft.invalidate();
				btnRight.setAlpha(mAlpha);
				btnRight.invalidate();
				if (!isHide && mAlpha < 255)
					mHandler.sendEmptyMessageDelayed(1, 100);
				
			} else if (msg.what == 0 && mAlpha > 0) {
				mAlpha -= 10;
				if (mAlpha < 0)
					mAlpha = 0;
				btnLeft.setAlpha(mAlpha);
				btnLeft.invalidate();
				btnRight.setAlpha(mAlpha);
				btnRight.invalidate();
				if (isHide && mAlpha > 0)
					mHandler.sendEmptyMessageDelayed(0, 800);
			}
		}
	};

	private void showImageButtonView() {
		isHide = false;
		mHandler.sendEmptyMessage(1);
	}

	private void hideImageButtonView() {
		new Thread() {
			public void run() {
				try {
					Thread.sleep(1500);
					isHide = true;
					mHandler.sendEmptyMessage(0);
				} catch (Exception e) {
					;
				}
			}
		}.start();
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		this.detector.onTouchEvent(event);
		switch (event.getAction()) {
		case MotionEvent.ACTION_MOVE:
		case MotionEvent.ACTION_DOWN:
			showImageButtonView();
			break;
		case MotionEvent.ACTION_UP:
			hideImageButtonView();
			break;
		}
		return true;
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		// 在程序退出(Activity销毁)时销毁窗口
		wm.removeView(btnLeft);
		wm.removeView(btnRight);
	}

	  @Override
		public boolean onDown(MotionEvent e) {
			// TODO Auto-generated method stub
			return false;
		}
	    
	    @Override
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
				float velocityY) {
			if (e1.getX() - e2.getX() > 120) {
				this.viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));
				this.viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));
				this.viewFlipper.showNext();
				return true;
			} else if (e1.getX() - e2.getX() < -120) {
				this.viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in));
				this.viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out));
				this.viewFlipper.showPrevious();
				return true;
			}
			
			return false;
		}
	    
	    @Override
	    public void onLongPress(MotionEvent e) {
	    	// TODO Auto-generated method stub
	    	
	    }
	    
	    @Override
	    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
	    		float distanceY) {
	    	// TODO Auto-generated method stub
	    	return false;
	    }
	    
	    @Override
	    public void onShowPress(MotionEvent e) {
	    	// TODO Auto-generated method stub
	    	
	    }
	    
	    @Override
	    public boolean onSingleTapUp(MotionEvent e) {
	    	// TODO Auto-generated method stub
	    	return false;
	    }
	}

 

 

分享到:
评论

相关推荐

    android点击按钮实现多个Activity滑动切换

    本文将详细讲解如何通过点击按钮来实现这种从右侧进入、左侧退出的滑动切换效果。 首先,我们需要理解Activity的概念。在Android应用中,Activity是用户界面的基本单元,它负责与用户进行交互。当我们需要在不同的...

    ViewPager的使用方法(实现左右滑动切换页面)

    ViewPager是Android平台中一个强大的视图滑动组件,它允许用户通过左右滑动来浏览多个页面,常用于实现类似Tab的界面效果,如微信、淘宝等应用中的底部导航栏。在Android开发中,ViewPager通常与PagerAdapter配合...

    android 页面左右滑动 单击切换页面

    在Android开发中,实现页面...总之,Android中的页面滑动切换可以通过ViewPager实现,而单击切换则可以通过监听ViewPager的`onPageSelected`事件来完成。结合示例代码,开发者可以快速地在自己的项目中实现类似的功能。

    android左右滑动页面

    综上所述,"android左右滑动页面"涉及到了Android开发中的多个关键知识点,包括ViewPager的使用、XML布局设计、按钮点击事件处理、PagerAdapter的实现以及滑动页面的优化和测试。通过这些技术,我们可以构建出流畅、...

    android之实现图片左右滑动 点击放大功能.zip

    - **ViewPager**:Android官方推荐使用ViewPager组件来实现图片的左右滑动切换。ViewPager可以承载多个页面,并且允许用户通过左右滑动来切换页面。对于图片浏览,每个页面通常对应一张图片。 - **PagerAdapter**...

    滑动屏幕切换界面显示

    2. **ViewPager**:ViewPager是Android中的一个适配器视图,用于展示多个全屏页面,并允许用户左右滑动切换页面。ViewPager内部使用了PageTransformer接口,可以通过自定义Transformer实现滑动时的动画效果,增强...

    android 手势左右与按钮混合触发滑动效果实现

    通过以上步骤,你就可以在Android应用中实现左右滑动手势与按钮混合触发的效果了。`SlidingDemo`项目应该包含了这些功能的实现,你可以参考代码进行学习和调试。记得在实际项目中根据具体需求调整滑动阈值、速度等...

    Android 滑动按钮

    总结来说,Android的滑动按钮控件是通过自定义View并结合触摸事件处理和绘图系统来实现的。在设计和实现过程中,需要注意用户体验、动画效果和触摸反馈等多个方面,以打造出既美观又易用的滑动按钮。在实际项目中,...

    Android Studio多个按钮跳转多个页面,利用选项卡功能实现

    `ViewPager`用于滑动切换页面,而`TabLayout`则负责显示选项卡。首先,确保在项目中添加`design`库依赖: ```groovy implementation 'com.google.android.material:material:1.4.0' ``` 然后,在布局文件中...

    TabLayout+ViewPager,切换页面,可点击,可滑动

    `TabLayout` 提供了可自定义的标签,用户可以通过点击这些标签来切换不同的页面,而 `ViewPager` 则负责管理这些页面的滑动切换效果。在本项目中,我们将探讨如何结合使用这两个组件,实现既可点击又可滑动的页面...

    Android 仿 Iphone 滑动按钮(SlipButton)

    在Android开发中,为了提供与iOS设备类似的用户体验,开发者经常需要实现特定的UI元素,例如Iphone上的滑动按钮(SlipButton)。本教程将详细讲解如何在Android中创建一个仿照iPhone风格的滑动按钮,并探讨其核心原理...

    安卓点击和滑动切换页面FragmentActivity

    在这个主题中,我们将深入探讨如何利用FragmentActivity实现多页面的点击和滑动切换。 1. **FragmentActivity基础** - FragmentActivity是Android Support Library的一部分,它允许开发者在较低版本的Android系统...

    android 标题栏两个按钮滑动切换

    标题栏上面有两个按钮,可以点击切换fragment,也可以滑动切换fragment。 标题栏上面有两个按钮,可以点击切换fragment,也可以滑动切换fragment。 标题栏上面有两个按钮,可以点击切换fragment,也可以滑动切换...

    android 实现左右滑动指引效果

    在Android开发中,实现左右滑动的指引效果是一种常见的用户引导功能,主要用于向初次使用应用的用户介绍关键操作或功能。这种效果通常采用 ViewPager 或者 RecyclerView 结合自定义动画来实现,让页面在用户的手势下...

    Android自定义开关按钮(滑动,点击)

    通过以上步骤,你可以创建出一个完全符合自己需求的自定义开关按钮,不仅具备滑动和点击功能,还能实现个性化的设计和交互效果。在实际开发中,这样的自定义组件可以大大提高应用的用户体验和辨识度。

    android滑动按钮源代码

    在Android开发中,滑动按钮(Sliding Button)是一种常见的交互元素,它提供了一种直观且有趣的方式来切换开关状态或执行特定操作。本资源提供的"android滑动按钮源代码"显然是一个模仿iPhone设计的实现,旨在为...

    Android图片左右滑动切换查看器.rar

    Android图片左右滑动切换查看器,Android手机的图片查看器,看图程序,在layout中定义的属性,也可以在代码中指定。  mViewFlipper.showNext(); //该方法显示下一个图片信息;  mViewFlipper.startFlipping();/...

    android 切换开关按钮

    综上所述,`android switch 切换开关按钮`是Android开发中常用的一种交互控件,通过合理的配置和定制,可以满足多种界面设计需求。`CompoundSwitchView`则可能是对原生`Switch`控件的扩展,提供了更多的自定义功能和...

    android Activity左右滑动

    当我们谈论“android Activity左右滑动”,通常是指实现一个可以左右滑动切换的界面效果,这种效果常用于实现类似抽屉菜单或者多页面切换的功能。在本例中,“InterfacialSlidingDemo”应该是一个演示如何实现这一...

Global site tag (gtag.js) - Google Analytics