效果图:
[img]
Android用悬浮按钮实现翻页效果
[/img]

工程结构图:
[img]
Android用悬浮按钮实现翻页效果
[/img]

PageFlipperActivity
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;/** * 悬浮按钮实现翻篇效果 * @author 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();    }        @Overridepublic 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);    }}


res/anim

in_leftright.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" /></set>


in_rightleft.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" /></set>


out_leftright.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" /></set>


out_rightleft.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" /></set>


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/image01" 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/image02"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/image03"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/image04"android:gravity="center" /></LinearLayout></ViewFlipper></LinearLayout>

更多相关文章

  1. Android的按钮按下效果
  2. Android 让按钮闪烁(点击的时候停止闪烁)
  3. Android 导航条效果实现(一) TabActivity+TabHost
  4. Android单选按钮组(RadioGroup)的用法
  5. Android中按钮点击后背景改变样式
  6. Android Activity 启动/退出 动画效果
  7. Android学习--Android带删除按钮的ListView
  8. 【Android】Activity遮罩效果的实现
  9. Android中使用TabHost实现类似标签栏的效果

随机推荐

  1. SQL 截取字符串应用代码
  2. SQLServer 数据库备份过程中经常遇到的九
  3. SQLServer 触发器 数据库进行数据备份
  4. SQLserver2000 企业版 出现"进程51发生了
  5. 远程连接SQLSERVER 2000服务器方法
  6. 数据转换冲突及转换过程中大对象的处理
  7. SQLServer 数据库开发顶级技巧
  8. SQL 提权 常用命令
  9. sqlserver 中一些常看的指标和清除缓存的
  10. SQLServer 快速备份的十种方法