Android用悬浮按钮实现翻页效果

先看效果:

 

MainActivity.java

package com.cn.nj.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;
/**
 * 悬浮按钮实现翻篇效果
 */
public class MainActivity 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(MainActivity.this, R.anim.in_leftright);
				viewFlipper.setOutAnimation(MainActivity.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(MainActivity.this, R.anim.in_rightleft);
				viewFlipper.setOutAnimation(MainActivity.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);
    }
}


 

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" 
	android:layout_height="fill_parent"
	android:orientation="vertical">
	<ViewFlipper 
		android:id="@+id/myViewFlipper"
		android:layout_width="fill_parent" 
		android:layout_height="fill_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/a1" 
				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/a2"
				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/a3"
				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/a4"
				android:gravity="center" />
		</LinearLayout>
	</ViewFlipper>
</LinearLayout>


AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.cn.nj.pageflipper"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

</manifest>


代码下载地址为:http://download.csdn.net/detail/niejing654092427/4831549

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值