Today to share their own with the suspension button click to achieve a page effect example.
First of all, a button to achieve suspension, it is necessary to use the system's top-level window-related windowmanager,windowmanager.layoutparams. Then add the permissions in the Androidmanifest.xml:
<uses-permission android:name= "Android.permission.SYSTEM_ALERT_WINDOW"/>
Then, we'll set up the related properties for Windowmanager,windowmanager.layoutparams:
Private WindowManager wm=null;
Private Windowmanager.layoutparams wmparams=null;
private void Initfloatview () {
//Get WindowManager
wm= (WindowManager) Getapplicationcontext (). Getsystemservice ("window");
Set Layoutparams (global variable) correlation parameter
wmparams = new Windowmanager.layoutparams ();
Wmparams.type=layoutparams.type_phone; Sets the window type
wmparams.format=pixelformat.rgba_8888; Format the picture, the effect is background transparent
//Set window flag
Wmparams.flags=layoutparams.flag_not_touch_modal
| layoutparams.flag_not_focusable;
In the upper left corner of the screen as the origin, set the X, y initial value
wmparams.x=0;
wmparams.y=0;
Set the suspension window long width data
wmparams.width=50;
wmparams.height=50;
}
The view created by the WindowManager AddView method can achieve the suspension window effect! So we need to create 2 hover buttons for the screen.
/** * Create left hover button */private void Createleftfloatview () {leftbtn=new ImageView (t
His);
Leftbtn.setimageresource (R.drawable.prev);
Leftbtn.setalpha (0);
Leftbtn.setonclicklistener (New View.onclicklistener () {public void OnClick (View arg0) {//previous}}); Adjust the suspension window wmparams.gravity=gravity.left|
gravity.center_vertical;
Display Myfloatview image Wm.addview (leftbtn, wmparams);
/** * Create right suspension button/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) {//Next}}); Adjust the suspension window wmparams.gravity=gravity.right|
gravity.center_vertical;
Display Myfloatview image Wm.addview (rightbtn, wmparams); }
I set the image's alpha value to 0 because I don't want the hover button to show up at the beginning; I want to implement the gradient display and gradient hide of the hover button by touching the screen. So we're going to work on the gradient effect of the picture:
//ImageView alpha value private int malpha = 0;
Private Boolean ishide; /** * Picture gradient display processing/private Handler Mhandler = new Handler () {public void Handlemessage (message msg) {if (M
Sg.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);
}
}
};
We use 2 different methods to control the display of the suspension button, hide:
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 ();
}
In order to not allow the suspension button to display, immediately began to hide. I use a thread, pause for 1.5 seconds, and then start the gradient hide.
Next, I'll rewrite the ontouchevent touchscreen event for the activity, as follows:
@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;
}
Finally, destroy the suspension button when the activity is destroyed, or the suspension button will be suspended there. Therefore, we will rewrite the OnDestroy () method of the activity and call the WindowManager Removeview () method to remove the suspension button.
@Override public
void OnDestroy () {
Super.ondestroy ();
Destroying the suspension window
Wm.removeview (LEFTBTN) when the program exits (activity destruction);
Wm.removeview (RIGHTBTN);
}
Here is the complete code for the program:
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; /** * Suspension button to achieve the flip effect * <a href= "http://my.oschina.net/arthor" target= "_blank" rel= "nofollow" > @author </a> liux H Ttp://my.oschina.net/liux * @date 2012-2-10 PM 2:48:52 * * public class Pageflipperactivity extends activity{private Wi
Ndowmanager Wm=null;
Private Windowmanager.layoutparams Wmparams=null;
Private ImageView Leftbtn=null;
Private ImageView Rightbtn=null;
ImageView's alpha value is 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);
Initialize the suspension button Initfloatview (); /** * Initialize the suspension button */private void Initfloatview () {//Get WindowManager wm= (WindowManager) getapplicationconte
XT (). Getsystemservice ("window");
Set Layoutparams (global variable) correlation parameter Wmparams = new Windowmanager.layoutparams (); Wmparams.type=layoutparams.type_phone; Sets the window type wmparams.format=pixelformat.rgba_8888; Format the picture, the effect is background transparent//Set window flag Wmparams.flags=layoutparams.flag_not_touch_modal |
layoutparams.flag_not_focusable;
In the upper left corner of the screen as the origin, set the X, y initial value wmparams.x=0;
wmparams.y=0;
Set the suspension window long width data wmparams.width=50;
wmparams.height=50;
Create a suspension button Createleftfloatview ();
Createrightfloatview ();
/** * Create left hover button/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) {//previous Viewflippe
R.setinanimation (Pageflipperactivity.this, r.anim.in_leftright);
Viewflipper.setoutanimation (Pageflipperactivity.this, r.anim.out_leftright);
Viewflipper.showprevious ();
}
}); Adjust the suspension window wmparams.gravity=gravity.left|
gravity.center_vertical;
Display Myfloatview image Wm.addview (leftbtn, wmparams);
/** * Create right suspension button/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) {//Next viewflipper.
Setinanimation (Pageflipperactivity.this, r.anim.in_rightleft);
Viewflipper.setoutanimation (Pageflipperactivity.this, r.anim.out_rightleft);
Viewflipper.shownext ();
}
}); Adjust the suspension window Wmparams.gravity=gravity.rigHt|
gravity.center_vertical;
Display Myfloatview image Wm.addview (rightbtn, wmparams);
/** * Picture gradient display processing/private Handler Mhandler = new Handler () {public void Handlemessage (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.A
Ction_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 ();
Destroying the suspension window Wm.removeview (LEFTBTN) when the program exits (activity destruction);
Wm.removeview (RIGHTBTN); }
}
The above content is small to share the Android with the suspension button to achieve the page effect, I hope you like.