本示例演示在Android中实现带渐显按钮的左右滑动效果。

  关于滑动效果,在我的上一篇博文中提到过,有兴趣的朋友可以访问: http://www.cnblogs.com/hanyonglu/archive/2012/02/13/2349827.html

  如果大家想实现带指引效果的左右滑动,请访问博文:http://www.cnblogs.com/hanyonglu/archive/2012/04/07/2435589.html

  先看下运行效果:

  

  程序结构:

  MainActivity文件中代码:


package com.android.buttonpageflipper;

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; /**
 * Android实现带渐显按钮的左右滑动效果
 * @Description: 自然状态下按钮不可见,触摸屏幕时显示按钮
 *
 * @FileName: MainActivity.java 
 *
 * @Package com.android.buttonpageflipper 
 *
 * @Author Hanyonglu
 *
 */
public class MainActivity extends Activity {
    //声明两个按钮,分别代表向左和向右滑动
    private ImageView btnLeft=null;
    private ImageView btnRight=null;
    
    //设置WindowManager
    private WindowManager wm=null;
    private WindowManager.LayoutParams wmParams=null;
    
    //ImageView的alpha值   
    private int mAlpha = 0;
    private boolean isHide;
    
    private ViewFlipper viewFlipper = null;
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        setTitle("Android实现渐显按钮的左右滑动效果");
        viewFlipper = (ViewFlipper) this.findViewById(R.id.myViewFlipper);
        
        //初始化左右按钮
        initImageButtonView();
    }
    
    /**
     * 初始化悬浮按钮
     */
    private void initImageButtonView(){
        //获取WindowManager
        wm=(WindowManager)getApplicationContext().getSystemService("window");
        
        //设置LayoutParams相关参数
        wmParams = new WindowManager.LayoutParams();
        
        //设置window type
        wmParams.type=LayoutParams.TYPE_PHONE;   
        
        //设置图片格式,效果为背景透明
        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;
        
        //创建左右按钮
        createLeftButtonView();
        createRightButtonView();
    }
    
    /**
     * 设置左边按钮
     */
    private void createLeftButtonView(){
        btnLeft=new ImageView(this);
        btnLeft.setImageResource(R.drawable.left);
        btnLeft.setAlpha(0);
        
        btnLeft.setOnClickListener(new View.OnClickListener() {    
            public void onClick(View arg0) {
                //上一个图像
                viewFlipper.setInAnimation(MainActivity.this, R.anim.push_left_in);
                viewFlipper.setOutAnimation(MainActivity.this, R.anim.push_left_out);
                viewFlipper.showPrevious();
            }
        });
        
        //调整窗口
        wmParams.gravity=Gravity.LEFT|Gravity.CENTER_VERTICAL;
        
        //显示图像
        wm.addView(btnLeft, wmParams);
    }
    
    /**
     * 设置右边按钮
     */
    private void createRightButtonView(){
        btnRight=new ImageView(this);
        btnRight.setImageResource(R.drawable.right);
        btnRight.setAlpha(0);
        
        btnRight.setOnClickListener(new View.OnClickListener() {    
            public void onClick(View arg0) {
                //下一个图像
                viewFlipper.setInAnimation(MainActivity.this, R.anim.push_right_in);
                viewFlipper.setOutAnimation(MainActivity.this, R.anim.push_right_out);
                viewFlipper.showNext();
            }
        });
        
        //调整窗口
        wmParams.gravity=Gravity.RIGHT|Gravity.CENTER_VERTICAL;
        
        //显示图像
        wm.addView(btnRight, wmParams);
    }
    
    /**
     * 设置按钮渐显效果
     */
    private Handler mHandler = new Handler()
    {
        public void handleMessage(Message msg) {
            if(msg.what==1 && mAlpha<255){           
                //通过设置不透明度设置按钮的渐显效果
                mAlpha += 50;
                
                if(mAlpha>255)
                    mAlpha=255;
                
                btnLeft.setAlpha(mAlpha);
                btnLeft.invalidate();
                btnRight.setAlpha(mAlpha);
                btnRight.invalidate();
                
                if(!isHide && mAlpha<255)
                    mHandler.sendEmptyMessageDelayed(1, 100);
            }else if(msg.what==0 && mAlpha>0){
                mAlpha -= 10;
                
                if(mAlpha<0)
                    mAlpha=0;
                btnLeft.setAlpha(mAlpha);
                btnLeft.invalidate();
                btnRight.setAlpha(mAlpha);
                btnRight.invalidate();
                
                if(isHide && mAlpha>0)
                    mHandler.sendEmptyMessageDelayed(0, 800);
            }            
        }
    };
    
    private void showImageButtonView(){
        isHide = false;
        mHandler.sendEmptyMessage(1);
    }
    
    private void hideImageButtonView(){
        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:
                showImageButtonView();            
                break;
            case MotionEvent.ACTION_UP:
                hideImageButtonView();                
                break;
        }
        
        return true;
    }     @Override
    public void onDestroy(){
        super.onDestroy();
        //在程序退出(Activity销毁)时销毁窗口
        wm.removeView(btnLeft);
        wm.removeView(btnRight);
    }
}  

  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/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:fromXDelta="100%p" android:toXDelta="0"
        android:duration="500" />
    <alpha android:fromAlpha="0.1" android:toAlpha="1.0"
        android:duration="500" />
</set>  

  push_left_out.xml文件中代码:


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="-100%p"
        android:duration="500" />
    <alpha android:fromAlpha="1.0" android:toAlpha="0.1"
        android:duration="500" />
</set>  

  push_right_in.xml文件中代码:


<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="-100%p" android:toXDelta="0"
        android:duration="500" />
    <alpha android:fromAlpha="0.1" android:toAlpha="1.0"
        android:duration="500" />
</set>  

  push_right_out.xml文件中代码:


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="100%p"
        android:duration="500" />
    <alpha android:fromAlpha="1.0" android:toAlpha="0.1"
        android:duration="500" />
</ set>

  最后,别忘记了在配置文件中设置权限。

  希望转载的朋友能够尊重作者的劳动成果,加上转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/02/13/2350171.html  谢谢。

  示例下载:点击下载

  结束。 ^_^

Android三种左右滑动效果 手势识别(转)的更多相关文章

  1. Android三种左右滑动效果 手势识别

    Android三种左右滑动效果 手势识别(转)   手势识别 1.onCreate中添加GestureDetector mGestureDetector; //监听手势事件 mGestureDetec ...

  2. Android平台中的三种翻页效果机器实现原理

    本文给开发者集中展现了Android平台中的三种翻页效果机器实现原理,希望能够对开发者有实际的帮助价值! 第一种翻页效果如下:     实现原理: 当前手指触摸点为a,则 a点坐标为(ax,ay), ...

  3. Android三种基本的加载网络图片方式(转)

    Android三种基本的加载网络图片方式,包括普通加载网络方式.用ImageLoader加载图片.用Volley加载图片. 1. [代码]普通加载网络方式 ? 1 2 3 4 5 6 7 8 9 10 ...

  4. Android 三种菜单(Menu)的实现

    感谢大佬:https://blog.csdn.net/chileme/article/details/82944764 一.常用方法 java onCreateOptionsMenu(Menu men ...

  5. android 三种定位方式

    http://www.cnblogs.com/oudi/archive/2012/03/22/2411509.html 最近在看android关于定位的方式,查了很多资料,也做了相关实验,在手机上做了 ...

  6. Android三种菜单简介

    Android的菜单分为三种类型:选项菜单(Option Menu).上下文菜单(Context Menu).子菜单(Sub Menu). 一.选项菜单 用户点击设备上的菜单按钮(Menu),触发事件 ...

  7. Android三种实现自定义ProgressBar的方式介绍

    一.通过动画实现 定义res/anim/loading.xml如下: View Row Code<?xml version="1.0" encoding="UTF- ...

  8. Android 三种方式实现自定义圆形进度条ProgressBar

    一.通过动画实现 定义res/anim/loading.xml如下: <?xml version="1.0" encoding="UTF-8"?> ...

  9. Android 三种方式实现自定义圆形页面加载中效果的进度条

    转载:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=76872 一.通过动画实现 定义res/anim/loading.xml如 ...

随机推荐

  1. codeforces 808D

    题意:给出一个序列,询问是否能移动一个数(或不操作)使得序列能分为左右两个和相等的子序列. 思路:对每个数处理最左边和最右边出现的位置.设置断点分左右区间,左右区间和差值的一半就是要找的数,进行判断. ...

  2. java实现同步的方法

    为何要实现同步 java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),      将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前 ...

  3. Oracle常见的几种登录方式

    1.运行SQLPLUS工具 C:\Users\csb>sqlplus(回车) (输入账户)system(回车) (输入密码) (回车) 2.直接进入SQLPLUS命令提示符,无用户的登陆 C:\ ...

  4. Java条件语句之 if...else

    if...else 语句的操作比 if 语句多了一步:  当条件成立时,则执行 if 部分的代码块: 条件不成立时,则进入 else 部分.例如,如果考试成绩大于 90 分,则奖励一个 IPHONE  ...

  5. scala学习手记22 - 参数化类型的可变性

    java 的代码中多少有些不是很严谨的内容,比如下面的这段代码: public class Trouble { public static void main(String[] args) { Int ...

  6. MySQL主从配置实现

    //////////////////////MySQL主从配置//////////////////////////// 首先,两边都要安装MySQL,启动两边的MySQL 接着,配置主从,要保证主从数 ...

  7. LeetCode第[17]题(Java):Letter Combinations of a Phone Number

    题目:最长公共前缀 难度:EASY 题目内容: Given a string containing digits from 2-9 inclusive, return all possible let ...

  8. Ceph配置项动态变更机制浅析

    转自:https://www.ustack.com/blog/ceph%e9%85%8d%e7%bd%ae%e9%a1%b9%e5%8a%a8%e6%80%81%e5%8f%98%e6%9b%b4%e ...

  9. IOS-内存分析

    一.内存分析 1.静态分析(Analyze) 不运行程序, 直接检测代码中是否有潜在的内存问题(不一定百分百准确, 仅仅是提供建议) 结合实际情况来分析, 是否真的有内存问题 2.动态分析(Profi ...

  10. dga2

    0e527eaf_5ec5_4623_9fe9_e459583acd72.com0fmgm1cuu7h1279dghgka0ltg.com0ydlanpuh4e2wl9h6udk6.com10uz8k ...