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自定义可拖拽的悬浮按钮---DragFloatingActionButton
悬浮按钮FloatingActionButton是Android 5.0系统添加的新控件,FloatingActionButton是继承至ImageView,所以FloatingActionButto ...
- selenium 翻页_利用selenium实现自动翻页爬取某鱼数据
基本思路: 首先用开发者工具找到需要提取数据的标签列表: 利用xpath定位需要提取数据的列表 然后再逐个提取相应的数据: 保存数据到csv: 利用开发者工具找到下一页按钮所在标签: 利用xpath提 ...
- android辅助功能实现群发,Android 8.0实现发送通知的方法
Android 8.0实现发送通知的方法 发布时间:2020-07-30 09:34:40 来源:亿速云 阅读:111 作者:小猪 这篇文章主要讲解了Android 8.0实现发送通知的方法,内容清晰 ...
- android 悬浮按钮 功能实现,怎么在Android中利用FloatingActionButton实现一个悬浮按钮效果...
怎么在Android中利用FloatingActionButton实现一个悬浮按钮效果 发布时间:2020-12-02 17:41:30 来源:亿速云 阅读:238 作者:Leah 今天就跟大家聊聊有 ...
- android 悬浮按钮和可交互提示,悬浮按钮的使用原则
当要用悬浮的时候,考虑下在哪使用?什么条件下使用?不使用行不行?使用了带来了什么效果?如果效果不好怎么办?哪些界面需要使用?一个界面都有要展示的要素,当悬浮窗的使用是不是影响本界面的因素,其他的界面的 ...
- Android炫酷的Toolbar+Bottom+Fab悬浮按钮显示、隐藏、渐变的各种实现姿势
前言 由于手机屏幕大小的限制,各种控件需要根据需求进行显示,隐藏,移动等,以增加视觉效果,用户体验.就拿目前市场上常见的APP如知乎.QQ.淘宝.美团等来说,在他们的APP里面随处可见一些比较优美的处 ...
- android悬浮按钮功能实现,Android中实现悬浮按钮
在有些APP中我们需要实现一个悬浮按钮,比如图片浏览应用左右翻页功能,比如左侧悬浮功能按钮.我们要实现此功能时,最开始想到的就是用FrameLayout来实现,但是如果把按钮简单的放到FrameLay ...
- android悬浮按钮弹出与隐藏,Android悬浮窗按钮实现点击并显示/隐藏多功能列表
前言 最近在一个项目中,需要制作录屏的功能,原先是在应用中有录屏/控制的按钮,思考之下觉得这种效果并不好,因此就想制作一个可以悬浮的悬浮窗,这样不论手机在什么界面中都可以对录屏功能进行控制. 这里就来 ...
- Android自定义可移动悬浮按钮
<com.example.notepad2.DragFloatActionButton android:id="@+id/fb" android:layout_height= ...
最新文章
- 拥抱iPhone,拥抱软件开发的未来
- 8种方法用Python实现线性回归,为你解析最高效选择
- 跨进程访问(AIDL服务)
- C++调用Python函数
- string相关库函数
- c++基础学习(11)--(模板、预处理器、信号处理)
- Problem D. Nothing is Impossible
- 快速开发字段很多的MIS表
- Windows Mobile 6 模拟器绿色中文版
- 迅雷2019校园招聘 内推码
- mac 右键 启动终端
- excel中看着是空单元格,使用Ctrl+G定位空值却定位不到
- 推荐10款实用必备的Windows10软件
- THREE.js(二):设置材质线条宽度(lineWidth) 无效
- 计算机卡住了怎样恢复,电脑频繁假死怎么办 电脑死机数据恢复
- 语义化你的HTML标签和属性
- Web Scraper爬取信息
- 初始化DirectX遇到的问题
- 在 SQL 中计算总行数的百分比
- 微信公众平台与微信开放平台的区别、服务号、订阅号、企业微信的区别