android悬浮功能实现,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利用悬浮按钮实现翻页效果,希望大家喜欢。
android悬浮功能实现,Android利用悬浮按钮实现翻页效果相关推荐
- android 辅助功能 翻页,Android利用悬浮按钮实现翻页效果
今天给大家分享下自己用悬浮按钮点击实现翻页效果的例子. 首先,一个按钮要实现悬浮,就要用到系统顶级窗口相关的WindowManager,WindowManager.LayoutParams.那么在An ...
- Delphi 10.4.2 轻松实现Android/IOS txt小说电子书阅读器应用APP翻页效果
Delphi 10.4.2是最新版本的跨平台本机应用开发工具,一套代码可编译到五个操作系统上:iOS.Android.Windows.macOS 和 Linux: 本代码仅仅数十行即可轻松实现Andr ...
- 利用CSS,实现翻页效果
利用css3的3d效果,实现一个简单的翻页器: <!DOCTYPE html> <html lang="en"> <head><meta ...
- android滑动切换卡片,一步步实现Viewpager卡片翻页效果
这个CardStackViewpager的灵感来自Github上面的 FlippableStackView开源项目,而我想实现的效果方向上刚好与FlippableStackView相反,而且细节上也有 ...
- QT qtablewidget按钮控制翻页效果
主要借鉴别人的思路 pro #------------------------------------------------
- Android利用贝塞尔曲线实现翻书效果(适配AndroidX)
实现背景 不知道你有没有遇到同样的问题,要实现翻书效果,如果你是使用github上的demo或者好多博客上写的方式,你会发现,当api从28开始,会抛出Invalid Region.Op.REPLAC ...
- Android 实现答题器功能(通过手势实现翻页效果)
Android 实现答题器功能(通过手势实现翻页效果) 1.问题描述 Android答题器的实现主要使用了ViewFilpper和GestureDetector来实现. 2.实现思路 把Activit ...
- Android 实现答题器功能(通过手势实现翻页效果)...
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010046908/article/details/51305933 Android 实现答题器功能 ...
- Android翻页效果原理实现之翻页的尝试
炮兵镇楼 在<自定义控件其实很简单>系列的前半部分中我们用了整整六节近两万字两百多张配图讲了Android图形的绘制,虽然篇幅很巨大但仍然只是图形绘制的冰山一角,旨在领大家入门,至于修行成 ...
- android做题imageview缩放,巧用ViewPager实现驾考宝典做题翻页效果
效果如下所示: 思路: a.利用ViewPager自带的动画效果,略作修改,实现滑动覆盖翻页效果. b.移动时加入阴影效果. 1.关键代码如下所示: public class ReaderViewPa ...
最新文章
- 一款蓝牙音频无线传输设备上拆下的光电管
- python与excel表格-如何用python处理excel表格
- 633. Sum of Square Numbers
- 一篇文章搞定,SpringBoot 创建定时任务
- linux cat代码,linux cat命令(示例代码)
- php源码仿三一重工,织梦仿三一重工业大学气企业网站php源码
- arcgis字段计算器--随机数
- linux系统grep用法,Linux系统中怎么使用grep命令?
- 服务器LCD显示面板,DELL服务器2950的错误代码表(前LCD面板)
- 谈一谈不常见却又不可少的ThreadLocal
- PHP 扩展 Mongo 与 MongoDB
- Java集合框架介绍
- 搜狗浏览器连接海康摄像头,无法显示画面
- SAP中检查货币代码
- 2020计算机一级考试wps分数,计算机一级WPS辅导:在WPS下实现用域真正分数输入技巧...
- 双代号网络图快速计算时差法
- cmd应对文件夹变成了exe
- HC-05/06蓝牙模块的原理及使用方法
- centos文件系统,日志以及文件误删恢复
- JZOJ【NOI2017模拟3.30】原谅