今天给大家分享下自己用悬浮按钮点击实现翻页效果的例子。
首先,一个按钮要实现悬浮,就要用到系统顶级窗口相关的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系统级悬浮按钮的具体代码,供大家参考,具体内容如下 具体的需求 1、就是做一个系统级的悬浮按钮,就像iPhone 桌面的那个悬浮按钮效果一样,能随意拖动,并且手一放开,悬浮按钮就自动靠边。 2、可以点击并且可以随意拖动。 3、悬浮按钮自动
本文向大家介绍Android实现顶部悬浮效果,包括了Android实现顶部悬浮效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android实现顶部悬浮效果的具体代码,供大家参考,具体内容如下 效果图 布局 java 注意事项 1.清单文件需要配置 2.gradle配置需要24以上 3.recyclerView的下滑和swipRefreshLayout的下拉刷新会冲突,所以需要
本文向大家介绍Android开发悬浮按钮 Floating ActionButton的实现方法,包括了Android开发悬浮按钮 Floating ActionButton的实现方法的使用技巧和注意事项,需要的朋友参考一下 一、介绍 这个类是继承自ImageView的,所以对于这个控件我们可以使用ImageView的所有属性 二、使用准备, 在as 的 build.grade文件中写上 三、使用说
本文向大家介绍vue悬浮可拖拽悬浮按钮的实例代码,包括了vue悬浮可拖拽悬浮按钮的实例代码的使用技巧和注意事项,需要的朋友参考一下 前言 vue开发手机端悬浮按钮实现,可以拖拽,滚动的时候收到里边,不影响视线 github地址 使用,基于vue-cli3.0+webpack 4+vant ui + sass+ rem适配方案+axios封装,构建手机端模板脚手架 vue-h5-template 后
本文向大家介绍Android使用手势实现翻页效果,包括了Android使用手势实现翻页效果的使用技巧和注意事项,需要的朋友参考一下 本程序的手势检测思路就是把Activity的TouchEvent交给GestureDetector处理,本程序使用了一个ViewFlipper组件,ViewFlipper可使用动画控制多个组件之间的切换效果。 本实例程序通过GestureDetector来检测用户的手
本文向大家介绍基于Android实现3D翻页效果,包括了基于Android实现3D翻页效果的使用技巧和注意事项,需要的朋友参考一下 最近做了一个简单的3D效果翻页特效,先说说我的思路吧,首先我这个翻页效果并不是两个Activity之间的跳转,而是在同一个activity类切换不同的view而已。我现在的做法是单击一个button然后Gone当前的布局,然后把需要呈现的布局visible,在隐藏当前