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

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

首先,一个按钮要实现悬浮,就要用到系统顶级窗口相关的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利用悬浮按钮实现翻页效果,希望大家喜欢。相关阅读:

电脑管家win10升级检测提示“帐号登录不符合要求”怎么办?

《C++ primer plus》读书笔记(二)

jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)

win10系统新功能"脱机地图"怎么使用?

ASP.NET MVC5网站开发文章管理架构(七)

css3通过scale()、rotate()实现放大、旋转

Mac如何设置自动报时避免忘记一些重要的时间

JS+DIV+CSS排版布局实现美观的选项卡效果

微软推出系列以婴儿成长为主题的Windows 10广告 超级欢乐

PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结

jQuery插件cxSelect多级联动下拉菜单实例解析

PHP判断浏览器、判断语言代码分享

windows下编辑的文件传到Linux后会出现^M怎么办?

jquery实现网页查找功能示例分享

php 悬浮按钮,Android_Android利用悬浮按钮实现翻页效果,今天给大家分享下自己用悬浮 - phpStudy...相关推荐

  1. 利用CSS,实现翻页效果

    利用css3的3d效果,实现一个简单的翻页器: <!DOCTYPE html> <html lang="en"> <head><meta ...

  2. android 辅助功能 翻页,Android利用悬浮按钮实现翻页效果

    今天给大家分享下自己用悬浮按钮点击实现翻页效果的例子. 首先,一个按钮要实现悬浮,就要用到系统顶级窗口相关的WindowManager,WindowManager.LayoutParams.那么在An ...

  3. Android利用贝塞尔曲线实现翻书效果(适配AndroidX)

    实现背景 不知道你有没有遇到同样的问题,要实现翻书效果,如果你是使用github上的demo或者好多博客上写的方式,你会发现,当api从28开始,会抛出Invalid Region.Op.REPLAC ...

  4. select vba 网页 翻页_Excel 如何利用VBA实现快捷翻页功能?

    在查看有较多数据的EXCEL文件时,可以通过键盘上的"PageUp"或"PageDown"键或者拖动窗口的滚动条来进行翻页操作.实际上,还可以通过编写一行简单的 ...

  5. QT qtablewidget按钮控制翻页效果

    主要借鉴别人的思路 pro #------------------------------------------------

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

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

  7. ajax将数据显示在class为content的标签中_利用selenium实现自动翻页爬取某鱼数据

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

  8. android首页图片轮播效果,Android_Android自动播放Banner图片轮播效果,先看一下效果图支持本地图 - phpStudy...

    Android自动播放Banner图片轮播效果 先看一下效果图 支持本地图片以及网络图片or本地网络混合. 使用方式: android:id="@+id/banner" andro ...

  9. 利用 WAAPI 实现百叶窗切页效果

    实现效果 在 CodePen 上查看 在 Github 上查看 简单思路 复制要切页的节点,利用 CSS 的 clip-path 属性对节点进行裁剪,将节点分成多个部分,每个部分分成上下两块(因为需要 ...

  10. html5实现3d翻页效果,利用css3 3d transform制作超逼真翻书效果

    本教程给大家带来一个非常有创意的翻书效果,使用的是css 3D transforms属性和css transitions属性.这里将给你展示两种不同的图书设计:精装书和平装书.这两种设计只需要简单的改 ...

最新文章

  1. 28款网页CSS设计工具和生成器
  2. 字符串函数 replace() 方法妙用
  3. 转载 cFos vs cFosSpeed
  4. 判断sem信号量为零_Linux线程同步(互斥量、信号量、条件变量、生产消费者模型)...
  5. 组合的示例代码 java_java实现Composite组合模式的实例代码
  6. 58 MM配置-评估和科目设置-OBYC配置自动记账
  7. 关于多线程编程您不知道的5 件事---有关高性能线程处理的微妙之处 (转)
  8. Android入门笔记09
  9. 廖雪峰python教程杨辉三角_打印杨辉三角(廖雪峰python教程)
  10. SQLite实现在线电子词典
  11. Latex符号与公式集合
  12. java调阿里云短信接口
  13. 『GoLang』错误处理
  14. ps人物碎片化飞溅效果特效怎么做
  15. AndroidStudio 实现用户登录注册
  16. 一文搞懂什么是GPA
  17. 解决Pr cc 2019主页加载不出来的问题
  18. 双向长短期记忆网络模型_基于深度双向长短期记忆网络的空气质量预测方法与流程...
  19. 使用DDR MIG例程读写DDR演示
  20. Scrapy问题总结

热门文章

  1. 【记录】PR|一些使用技巧记录
  2. Android数据持久化存储(一)
  3. 计算机科学基础 浙大学分,Zju生存指南-学(上)
  4. 论文阅读笔记:From Zero-Shot Learning to Cold-Start Recommendation
  5. sql 取最近一周的周几_我最近的几周摘要
  6. ueditor 前后端分离+图片上传
  7. 百度一下,你就知道.2
  8. Unity打安卓包 Android 所有错误解决方案大全(几乎囊括所有打包错误 )
  9. 19、论文解读:Intensity Scan Context: Coding Intensity and Geometry Relations for Loop Closure Detection
  10. mysql连接被拒绝 密码也对_MYSQL密码正确,却依然显示拒绝连接