欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-16 21:02:16
今天给大家分享下自己用悬浮按钮点击实现翻页效果的例子。 首先,一个按钮要实现悬浮,就要用到系统*窗口相关的windowmanager,windowmanager.lay...

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

首先,一个按钮要实现悬浮,就要用到系统*窗口相关的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);
  }

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

下面是程序的完整代码:

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利用悬浮按钮实现翻页效果,希望大家喜欢。

上一篇:

下一篇: