Android利用悬浮按钮实现翻页效果_Android

今天给大家分享下自己用悬浮按钮点击实现翻页效果的例子。

首先,一个按钮要实现悬浮,就要用到系统顶级窗口相关的WindowManager,WindowManager.LayoutParams。那么在AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

然后,我们要对WindowManager,WindowManager.LayoutParams的相关属性进行下设置:

private WindowManager wm=null;
private WindowManager.LayoutParams wmParams=null;
private void initFloatView(){
  //获取WindowManager
  wm=(WindowManager)getApplicationContext().getSystemService("window");
  //设置LayoutParams(全局变量)相关参数
   wmParams = new WindowManager.LayoutParams();
  wmParams.type=LayoutParams.TYPE_PHONE;  //设置window type
  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;
}

通过WindowManager的addView方法创建的View可以实现悬浮窗口效果!因此,我们需要为屏幕创建2个悬浮按钮了。

 /**
  * 创建左边悬浮按钮
  */
  private void createLeftFloatView(){
    leftbtn=new ImageView(this);
    leftbtn.setImageResource(R.drawable.prev);
    leftbtn.setAlpha(0);
    leftbtn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View arg0) {
      //上一篇
    }
  });
    //调整悬浮窗口
    wmParams.gravity=Gravity.LEFT|Gravity.CENTER_VERTICAL;
    //显示myFloatView图像
    wm.addView(leftbtn, wmParams);
  }
  /**
  * 创建右边悬浮按钮
  */
  private void createRightFloatView(){
    rightbtn=new ImageView(this);
    rightbtn.setImageResource(R.drawable.next);
    rightbtn.setAlpha(0);
    rightbtn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View arg0) {
      //下一篇
    }
  });
    //调整悬浮窗口
    wmParams.gravity=Gravity.RIGHT|Gravity.CENTER_VERTICAL;
    //显示myFloatView图像
    wm.addView(rightbtn, wmParams);
  }

我把图片的Alpha值设置为0,是因为不想让悬浮按钮一开始就展现出来;我想通过对屏幕的触摸来实现悬浮按钮的渐变显示和渐变隐藏。那么我们还要对图片的渐变效果进行下处理:

 // ImageView的alpha值
  private int mAlpha = 0;
  private boolean isHide;
  /**
   * 图片渐变显示处理
   */
  private Handler mHandler = new Handler()
  {
  public void handleMessage(Message msg) {
    if(msg.what==1 && mAlpha<255){
    //System.out.println("---"+mAlpha);
    mAlpha += 50;
    if(mAlpha>255)
      mAlpha=255;
       leftbtn.setAlpha(mAlpha);
       leftbtn.invalidate();
       rightbtn.setAlpha(mAlpha);
       rightbtn.invalidate();
    if(!isHide && mAlpha<255)
      mHandler.sendEmptyMessageDelayed(1, 100);
    }else if(msg.what==0 && mAlpha>0){
    //System.out.println("---"+mAlpha);
    mAlpha -= 10;
    if(mAlpha<0)
      mAlpha=0;
    leftbtn.setAlpha(mAlpha);
    leftbtn.invalidate();
    rightbtn.setAlpha(mAlpha);
    rightbtn.invalidate();
    if(isHide && mAlpha>0)
      mHandler.sendEmptyMessageDelayed(0, 100);
    }
  }
  };

我们再用2个方法分别来控制悬浮按钮的显示、隐藏:

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

这里为了不让悬浮按钮显示后,马上就开始隐藏。我使用了一个线程,先暂停1.5秒钟,再开始渐变隐藏。
接下来,我要重写Activity的onTouchEvent触屏事件,代码如下:

 @Override
  public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
      case MotionEvent.ACTION_MOVE:
    case MotionEvent.ACTION_DOWN:
    //System.out.println("========ACTION_DOWN");
    showFloatView();
    break;
    case MotionEvent.ACTION_UP:
    //System.out.println("========ACTION_UP");
    hideFloatView();
    break;
  }
  return true;
  }

最后,要在Activity销毁时销毁悬浮按钮,不然悬浮按钮会一直悬浮在那。因此,我们要再重写Activity的onDestroy()方法,并调用WindowManager的removeView()方法来移除悬浮按钮。

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

下面是程序的完整代码:

package com.liux.pageflipper;
import android.app.Activity;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.ImageView;
import android.widget.ViewFlipper;
/**
 * 悬浮按钮实现翻篇效果
 * <a href="http://my.oschina.net/arthor" target="_blank" rel="nofollow">@author</a> liux http://my.oschina.net/liux
 * @date 2012-2-10 下午2:48:52
 */
public class PageFlipperActivity extends Activity{
  private WindowManager wm=null;
  private WindowManager.LayoutParams wmParams=null;
  private ImageView leftbtn=null;
  private ImageView rightbtn=null;
  // ImageView的alpha值
  private int mAlpha = 0;
  private boolean isHide;
  private ViewFlipper viewFlipper = null;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    viewFlipper = (ViewFlipper) this.findViewById(R.id.myViewFlipper);
    //初始化悬浮按钮
     initFloatView();
  }
  /**
   * 初始化悬浮按钮
   */
  private void initFloatView(){
    //获取WindowManager
    wm=(WindowManager)getApplicationContext().getSystemService("window");
    //设置LayoutParams(全局变量)相关参数
    wmParams = new WindowManager.LayoutParams();
    wmParams.type=LayoutParams.TYPE_PHONE;  //设置window type
    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;
    //创建悬浮按钮
     createLeftFloatView();
    createRightFloatView();
  }
  /**
   * 创建左边悬浮按钮
   */
  private void createLeftFloatView(){
    leftbtn=new ImageView(this);
    leftbtn.setImageResource(R.drawable.prev);
    leftbtn.setAlpha(0);
    leftbtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
    //上一篇
    viewFlipper.setInAnimation(PageFlipperActivity.this, R.anim.in_leftright);
    viewFlipper.setOutAnimation(PageFlipperActivity.this, R.anim.out_leftright);
    viewFlipper.showPrevious();
    }
  });
    //调整悬浮窗口
     wmParams.gravity=Gravity.LEFT|Gravity.CENTER_VERTICAL;
     //显示myFloatView图像
     wm.addView(leftbtn, wmParams);
  }
  /**
   * 创建右边悬浮按钮
   */
  private void createRightFloatView(){
    rightbtn=new ImageView(this);
    rightbtn.setImageResource(R.drawable.next);
    rightbtn.setAlpha(0);
     rightbtn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View arg0) {
    //下一篇
    viewFlipper.setInAnimation(PageFlipperActivity.this, R.anim.in_rightleft);
    viewFlipper.setOutAnimation(PageFlipperActivity.this, R.anim.out_rightleft);
    viewFlipper.showNext();
    }
  });
    //调整悬浮窗口
     wmParams.gravity=Gravity.RIGHT|Gravity.CENTER_VERTICAL;
     //显示myFloatView图像
     wm.addView(rightbtn, wmParams);
  }
  /**
   * 图片渐变显示处理
   */
  private Handler mHandler = new Handler()
  {
  public void handleMessage(Message msg) {
        if(msg.what==1 && mAlpha<255){
    //System.out.println("---"+mAlpha);
    mAlpha += 50;
    if(mAlpha>255)
        mAlpha=255;
    leftbtn.setAlpha(mAlpha);
    leftbtn.invalidate();
    rightbtn.setAlpha(mAlpha);
    rightbtn.invalidate();
    if(!isHide && mAlpha<255)
      mHandler.sendEmptyMessageDelayed(1, 100);
    }else if(msg.what==0 && mAlpha>0){
    //System.out.println("---"+mAlpha);
    mAlpha -= 10;
    if(mAlpha<0)
      mAlpha=0;
    leftbtn.setAlpha(mAlpha);
    leftbtn.invalidate();
    rightbtn.setAlpha(mAlpha);
    rightbtn.invalidate();
    if(isHide && mAlpha>0)
      mHandler.sendEmptyMessageDelayed(0, 100);
    }
  }
  };
  private void showFloatView(){
    isHide = false;
    mHandler.sendEmptyMessage(1);
  }
  private void hideFloatView(){
  new Thread(){
        public void run() {
      try {
         Thread.sleep(1500);
         isHide = true;
         mHandler.sendEmptyMessage(0);
      } catch (Exception e) {
         ;
      }
    }
  }.start();
  }
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
      case MotionEvent.ACTION_MOVE:
    case MotionEvent.ACTION_DOWN:
    //System.out.println("========ACTION_DOWN");
    showFloatView();
    break;
    case MotionEvent.ACTION_UP:
    //System.out.println("========ACTION_UP");
    hideFloatView();
    break;
  }
  return true;
  }
  @Override
  public void onDestroy(){
    super.onDestroy();
    //在程序退出(Activity销毁)时销毁悬浮窗口
    wm.removeView(leftbtn);
    wm.removeView(rightbtn);
  }
}

以上内容是小编给大家分享的Android利用悬浮按钮实现翻页效果,希望大家喜欢。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, 带按钮的翻页
android悬浮按钮
android 悬浮按钮实现、ios 悬浮按钮实现、ios app 实现悬浮按钮、安卓悬浮按钮的实现、swift 悬浮按钮的实现,以便于您获取更多的相关知识。

时间: 2024-08-04 13:56:02

Android利用悬浮按钮实现翻页效果_Android的相关文章

Android利用悬浮按钮实现翻页效果

今天给大家分享下自己用悬浮按钮点击实现翻页效果的例子. 首先,一个按钮要实现悬浮,就要用到系统顶级窗口相关的WindowManager,WindowManager.LayoutParams.那么在AndroidManifest.xml中添加权限: <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 然后,我们要对WindowManager,WindowManager.Layout

基于Android实现3D翻页效果_Android

最近做了一个简单的3D效果翻页特效,先说说我的思路吧,首先我这个翻页效果并不是两个Activity之间的跳转,而是在同一个activity类切换不同的view而已.我现在的做法是单击一个button然后Gone当前的布局,然后把需要呈现的布局visible,在隐藏当前布局的时候启动动画,然后给动画添加监听,在动画结束时开始另外一个view的入场动画就行了. 下面来看下我的主页面的布局文件: <FrameLayout xmlns:android="http://schemas.android

一步步实现Viewpager卡片翻页效果_Android

这个CardStackViewpager的灵感来自Github上面的 FlippableStackView开源项目,而我想实现的效果方向上恰好与FlippableStackView相反,并且细节上也有些区别,详见下面的效果对比图: FlippableStackView运行效果图: CardStackViewpager运行效果图: 这里讲一个小插曲,自己尝试实现CardStackViewpager的过程中,由于一开始对PageTransformer的onTransform(View page, f

android中图片翻页效果简单的实现方法_Android

复制代码 代码如下: public class PageWidget extends View {    private Bitmap foreImage;    private Bitmap bgImage;    private PointF touchPt;    private int screenWidth;    private int screenHeight;    private GradientDrawable shadowDrawableRL;    private Gra

android中图片翻页效果简单的实现方法

复制代码 代码如下:public class PageWidget extends View {    private Bitmap foreImage;    private Bitmap bgImage;    private PointF touchPt;    private int screenWidth;    private int screenHeight;    private GradientDrawable shadowDrawableRL;    private Grad

基于Android实现3D翻页效果

最近做了一个简单的3D效果翻页特效,先说说我的思路吧,首先我这个翻页效果并不是两个Activity之间的跳转,而是在同一个activity类切换不同的view而已.我现在的做法是单击一个button然后Gone当前的布局,然后把需要呈现的布局visible,在隐藏当前布局的时候启动动画,然后给动画添加监听,在动画结束时开始另外一个view的入场动画就行了. 下面来看下我的主页面的布局文件: <FrameLayout xmlns:android="http://schemas.android

利用PS创意合成画册中美女翻页效果(1/5)

本文章来告诉你利用ps教程创意合成画册中美女翻页效果哦,好了费话不说多了来看看这款ps教程制作教程吧. 1.打开素材1,各位看教程前面,各位看看完成效果想想大约过程吧,当然越具体越好啦,个人想出来的也是有收获的. 2.用路径工具描边,将背景去掉,原因是我不喜爱那背景,你假如喜爱的话就留着吧. 首页 1 2 3 4 5 末页

Android通过手势实现答题器翻页效果

本文实例为大家分享了Android答题器翻页功能,主要使用ViewFilpper和GestureDetector来实现,供大家参考,具体内容如下 1.效果图 2.实现思路 把Activity的TouchEvent事件交个GestureDetector来处理,然后使用ViewFilpper使用动画控制多个组件的之间的切换效果.手势的一个Api就不详细说了,大家如果不了解可以查一下. 3.实现的步骤 1).构建手势检测器 2).准备数据 3).为ViewFilpper添加子控件. 4).初始化Ani

android ViewPager实现滑动翻页效果实例代码

实现ViewPager的滑动翻页效果可以使用ViewPager的setPageTransformer方法,如下: import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.View; public class ReadViewPager extends ViewPager { public ReadV