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); }
下面是程序的完整代码:
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利用悬浮按钮实现翻页效果,希望大家喜欢。
推荐阅读
-
Android利用悬浮按钮实现翻页效果
-
圣诞节,写个程序练练手————Android 全界面悬浮按钮实现
-
Android使用手势实现翻页效果
-
Android利用CountDownTimer实现点击获取验证码倒计时效果
-
Android 利用ViewPager实现图片可以左右循环滑动效果附代码下载
-
Android实现桌面悬浮小火箭效果
-
Android RecyclerView打造悬浮效果的实现代码
-
Android利用CountDownTimer实现验证码倒计时效果实例
-
Android实现美团、大众点评的购买悬浮效果(ScrollView滚动监听)
-
android ViewPager实现滑动翻页效果实例代码