import android.annotation.SuppressLint;
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.View.OnClickListener;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.ImageView;
import android.widget.ViewFlipper;
@SuppressLint("HandlerLeak")
public class PageFlipperActivity extends Activity {
private ViewFlipper viewFlipper;
private WindowManager wm;
private LayoutParams params;
private ImageView rightbtn;
private ImageView leftbtn;
private int mAlpha;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper);
initFloatView();//初始化悬浮按钮
}
/*初始化悬浮按钮
* */
private void initFloatView(){
//获取WindowManager
wm = (WindowManager)
getApplicationContext().getSystemService(WINDOW_SERVICE);
params = new LayoutParams();
params.type=LayoutParams.TYPE_PHONE;//设置window type
params.format=PixelFormat.RGBA_8888;//设置图片格式,效果为背景透明
//设置Window flag
/*FLAG_NOT_TOUCH_MODAL:
当窗口可以获得焦点(没有设置 FLAG_NOT_FOCUSALBE 选项)时,
仍然将窗口范围之外的点设备事件(鼠标、触摸屏)发送给后面的窗口处理。
否则它将独占所有的点设备事件,而不管它们是不是发生在窗口范围内。*/
params.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL|LayoutParams.FLAG_NOT_FOCUSABLE;
//以屏幕左上角为原点,设置x、y初始值
params.x=0;
params.y=0;
//设置悬浮窗口长宽数据
params.width=50;
params.height=50;
//创建悬浮按钮
createLeftFloatView();
createRightFloatView();
}
//创建左边悬浮按钮
@SuppressWarnings("deprecation")
private void createLeftFloatView() {
leftbtn = new ImageView(this);
leftbtn.setImageResource(R.drawable.left);
leftbtn.setAlpha(0);
leftbtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
viewFlipper.setInAnimation(PageFlipperActivity.this, R.anim.push_left_in);
viewFlipper.setOutAnimation(PageFlipperActivity.this, R.anim.push_left_out);
viewFlipper.showPrevious();
System.out.println("向左滑动一格");
}
});
//调整悬浮窗口
params.gravity=Gravity.LEFT|Gravity.CENTER_VERTICAL;
//显示myFloatView图像
wm.addView(leftbtn, params);
}
@SuppressWarnings("deprecation")
private void createRightFloatView() {
rightbtn = new ImageView(this);
rightbtn.setImageResource(R.drawable.right);
rightbtn.setAlpha(0);
rightbtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// 下一篇
viewFlipper.setInAnimation(PageFlipperActivity.this,R.anim.push_right_in);
viewFlipper.setOutAnimation(PageFlipperActivity.this,R.anim.push_right_out);
viewFlipper.showNext();
System.out.println("向右移动");
}
});
params.gravity = Gravity.RIGHT | Gravity.CENTER_VERTICAL;
wm.addView(rightbtn, params);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
showFloatView();
//System.out.println("ACTION_DOWN");
break;
case MotionEvent.ACTION_UP:
hideFloatView();
//System.out.println("ACTION_UP");
break;
}
return true;
}
private void showFloatView(){
System.out.println("showFloatView");
mHandler.postDelayed(new Runnable() {
public void run() {
Message message=new Message();
mAlpha+=50;
if(mAlpha>255){
mAlpha=255;
message.obj=mAlpha;
mHandler.sendMessage(message);
return;
}
message.obj=mAlpha;
mHandler.sendMessage(message);
mHandler.postDelayed(this, 100);
}
}, 1000);
}
private void hideFloatView(){
System.out.println("hideFloatView");
mHandler.postDelayed(new Runnable() {
public void run() {
Message message=new Message();
mAlpha-=10;
if(mAlpha<0){
mAlpha=0;
message.obj=mAlpha;
mHandler.sendMessage(message);
return;
}
message.obj=mAlpha;
mHandler.sendMessage(message);
mHandler.postDelayed(this, 100);
}
}, 5*1000);
}
private Handler mHandler=new Handler(){
@SuppressWarnings("deprecation")
public void handleMessage(Message msg) {
int alpha=(Integer) msg.obj;
System.out.println("不透明alpha:"+alpha);
leftbtn.setAlpha(alpha);
leftbtn.invalidate();
rightbtn.setAlpha(alpha);
rightbtn.invalidate();
};
};
protected void onDestroy() {
super.onDestroy();
//在程序退出(Activity销毁)时销毁悬浮窗口
wm.removeView(leftbtn);
wm.removeView(rightbtn);
};
}
最后一定要在onDestroy中销毁,
所加权限:<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
xml文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".PageFlipperActivity" >
<ViewFlipper
android:id="@+id/viewflipper"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/one"
android:gravity="center" />
</LinearLayout>
<!-- 第二个页面 -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/two"
android:gravity="center" />
</LinearLayout>
<!-- 第三个页面 -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/three"
android:gravity="center" />
</LinearLayout>
<!-- 第四个页面 -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/four"
android:gravity="center" />
</LinearLayout>
<!-- 第五个页面 -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/five"
android:gravity="center" />
</LinearLayout>
</ViewFlipper>
</LinearLayout>
动画文件:
push_left_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="100%p"
android:toXDelta="0" />
<alpha
android:duration="500"
android:fromAlpha="0.1"
android:toAlpha="1.0" />
</set>
push_left_out.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="100%p"
android:toXDelta="0" />
<alpha
android:duration="500"
android:fromAlpha="0.1"
android:toAlpha="1.0" />
</set>
push_right_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="-100%p"
android:toXDelta="0" />
<alpha
android:duration="500"
android:fromAlpha="0.1"
android:toAlpha="1.0" />
</set>
push_right_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="0"
android:toXDelta="100%p" />
<alpha
android:duration="500"
android:fromAlpha="1.0"
android:toAlpha="0.1" />
</set>