`

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

 
阅读更多
效果图:
[img]

[/img]

工程结构图:
[img]

[/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();
    }
    
    @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);
    }
}


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>
  • 大小: 22.1 KB
  • 大小: 25.7 KB
分享到:
评论

相关推荐

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

    今天给大家分享下自己用悬浮按钮点击实现翻页效果的例子。 首先,一个按钮要实现悬浮,就要用到系统顶级窗口相关的WindowManager,WindowManager.LayoutParams。那么在AndroidManifest.xml中添加权限: &lt;uses ...

    安卓悬浮按钮切换图片

    综上所述,"安卓悬浮按钮切换图片"涉及到的知识点包括:悬浮按钮的使用、点击事件监听、图片切换逻辑实现、手势识别、动画效果以及性能优化。"PageFlipperDemo"项目很可能是对这些概念的实践展示,通过源码分析,...

    利用悬浮按钮实现翻页特效

    该源码实现了利用悬浮按钮实现翻页特效源码,该效果的源码很简单,而且又很容易上手,首先是一个按钮要实现悬浮,然后就要用到系统顶级窗口相关的WindowManager,WindowManager.LayoutParams。那么在AndroidManifest...

    android 悬浮效果

    文件名`android_PageFlipper`可能是指一个实现翻页效果的库,这在Android中可以用于模拟真实的书籍翻页效果。这类库通常提供自定义视图,允许开发者创建具有动态翻页动画的页面容器。使用PageFlipper库可以增加应用...

    android 网上集合的9种不同经典效果

    1. **卷曲翻页效果**:这种效果常见于电子书阅读器或相册应用,通过模拟真实的纸张翻页动作,增加用户操作的真实感。实现时可以利用OpenGL ES或者自定义View来绘制页面的弯曲和翻转动画,调整页面的透明度和位置,使...

    Android的移动应用页面特效集合源码.rar

    6. **3D翻页效果**:通过利用OpenGL ES或Android的硬件加速特性,可以实现更复杂的3D页面翻转效果,为用户提供独特的浏览体验。 7. **自定义导航栏**:包括导航栏的动画效果,如渐变颜色、透明度变化等,可以自定义...

    Android项目之-页面特效集合(附源码).zip

    这可能包括触摸反馈、按钮按下效果、悬浮按钮变形等。开发者可以通过设置触摸监听器、使用`StateListDrawable`为不同状态设置不同背景,或者自定义View来实现这些效果。 5. 列表滚动特效: 在ListView、...

    15款强大android布局图片浏览电子阅读

    8. **页面滑动布局(ViewPager)**:在图片浏览和电子阅读应用中非常常见,允许用户左右滑动查看多个页面,适合实现电子书翻页效果。 9. **网格视图(GridView)**:与网格布局类似,但提供滚动功能,适用于图片库...

    Android美文源码beauty.zip

    源码中可能会包含自定义的UI组件,以实现独特的设计效果,如卡片视图(CardView)、悬浮按钮(FloatingActionButton)等。 5. **图片加载库**: - 对于文章中的图片,开发者可能会使用 Glide 或 Picasso 图片加载...

    网易UEDC设计规范

    这份规范涵盖了色彩、按钮、文字、翻页控件和弹窗等多个关键设计元素,适用于包括Android平台在内的多种环境。 1. **色彩规范**:色彩是界面设计中的核心元素,网易蜂巢色彩系统为设计师提供了丰富的色彩方案。这套...

    GridView分页整套精美样式

    例如,增加圆角、渐变背景、悬浮效果等,或者使用图标字体库替换文字按钮。 最后,别忘了在HTML中正确地引用CSS文件,确保样式生效。在GridView控件中,可以使用`CssClass`属性设置主容器的类名,而分页链接按钮...

Global site tag (gtag.js) - Google Analytics