android左右滑动开关,Android点击左右按钮实现左右滑动页面切换

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

6360e620e4c2c8a2ad5aa7ad4a45622e.png

316ade07a372fa57f12354fdb34a0270.png

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;

}

}