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

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

然后,我们要对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;

/**

* 悬浮按钮实现翻篇效果

* @author 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利用悬浮按钮实现翻页效果相关推荐

  1. Android自定义可拖拽的悬浮按钮---DragFloatingActionButton

    悬浮按钮FloatingActionButton是Android 5.0系统添加的新控件,FloatingActionButton是继承至ImageView,所以FloatingActionButto ...

  2. selenium 翻页_利用selenium实现自动翻页爬取某鱼数据

    基本思路: 首先用开发者工具找到需要提取数据的标签列表: 利用xpath定位需要提取数据的列表 然后再逐个提取相应的数据: 保存数据到csv: 利用开发者工具找到下一页按钮所在标签: 利用xpath提 ...

  3. android辅助功能实现群发,Android 8.0实现发送通知的方法

    Android 8.0实现发送通知的方法 发布时间:2020-07-30 09:34:40 来源:亿速云 阅读:111 作者:小猪 这篇文章主要讲解了Android 8.0实现发送通知的方法,内容清晰 ...

  4. android 悬浮按钮 功能实现,怎么在Android中利用FloatingActionButton实现一个悬浮按钮效果...

    怎么在Android中利用FloatingActionButton实现一个悬浮按钮效果 发布时间:2020-12-02 17:41:30 来源:亿速云 阅读:238 作者:Leah 今天就跟大家聊聊有 ...

  5. android 悬浮按钮和可交互提示,悬浮按钮的使用原则

    当要用悬浮的时候,考虑下在哪使用?什么条件下使用?不使用行不行?使用了带来了什么效果?如果效果不好怎么办?哪些界面需要使用?一个界面都有要展示的要素,当悬浮窗的使用是不是影响本界面的因素,其他的界面的 ...

  6. Android炫酷的Toolbar+Bottom+Fab悬浮按钮显示、隐藏、渐变的各种实现姿势

    前言 由于手机屏幕大小的限制,各种控件需要根据需求进行显示,隐藏,移动等,以增加视觉效果,用户体验.就拿目前市场上常见的APP如知乎.QQ.淘宝.美团等来说,在他们的APP里面随处可见一些比较优美的处 ...

  7. android悬浮按钮功能实现,Android中实现悬浮按钮

    在有些APP中我们需要实现一个悬浮按钮,比如图片浏览应用左右翻页功能,比如左侧悬浮功能按钮.我们要实现此功能时,最开始想到的就是用FrameLayout来实现,但是如果把按钮简单的放到FrameLay ...

  8. android悬浮按钮弹出与隐藏,Android悬浮窗按钮实现点击并显示/隐藏多功能列表

    前言 最近在一个项目中,需要制作录屏的功能,原先是在应用中有录屏/控制的按钮,思考之下觉得这种效果并不好,因此就想制作一个可以悬浮的悬浮窗,这样不论手机在什么界面中都可以对录屏功能进行控制. 这里就来 ...

  9. Android自定义可移动悬浮按钮

    <com.example.notepad2.DragFloatActionButton android:id="@+id/fb" android:layout_height= ...

最新文章

  1. 拥抱iPhone,拥抱软件开发的未来
  2. 8种方法用Python实现线性回归,为你解析最高效选择
  3. 跨进程访问(AIDL服务)
  4. C++调用Python函数
  5. string相关库函数
  6. c++基础学习(11)--(模板、预处理器、信号处理)
  7. Problem D. Nothing is Impossible
  8. 快速开发字段很多的MIS表
  9. Windows Mobile 6 模拟器绿色中文版
  10. 迅雷2019校园招聘 内推码
  11. mac 右键 启动终端
  12. excel中看着是空单元格,使用Ctrl+G定位空值却定位不到
  13. 推荐10款实用必备的Windows10软件
  14. THREE.js(二):设置材质线条宽度(lineWidth) 无效
  15. 计算机卡住了怎样恢复,电脑频繁假死怎么办 电脑死机数据恢复
  16. 语义化你的HTML标签和属性
  17. Web Scraper爬取信息
  18. 初始化DirectX遇到的问题
  19. 在 SQL 中计算总行数的百分比
  20. 微信公众平台与微信开放平台的区别、服务号、订阅号、企业微信的区别

热门文章

  1. 头歌Educoder——Java高级特性 - Java反射
  2. docker 国内镜像问题
  3. css元素的显示与隐藏 display显示隐藏 +visibility显示隐藏 +overflow溢出显示隐藏
  4. 新消费时代,微博为何成为品牌“焦虑症”的首选?
  5. html双向绑定,双向绑定
  6. Android 电源管理————gotosleep和userActivity关注
  7. 玩王者技术太菜,或许读者可以看看小编的这篇文章
  8. 为什么在2022年数据可视化的性能这么重要?
  9. 数组的map方法返回值
  10. 生成式对抗网络模型综述