本示例演示在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  谢谢。

  示例下载:点击下载

  结束。 ^_^

转载于:https://www.cnblogs.com/antyi/p/3667949.html

Android三种左右滑动效果 手势识别(转)相关推荐

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

    [实例简介] Android 三种方式实现自定义圆形页面加载中效果的进度条 [实例截图] [核心代码] ad376a86-a9aa-49bc-8cea-321bcff2c0c3 └── AnimRou ...

  2. Android三种姿势带你玩转360度全景图功能

    简介 大家好我是张鹏辉(道长)人如其名,我是天桥上算命的,转发这条博文,接下来一个月会有意想不到的惊喜发生.最近微博上的全景图火了,所以决定实现一下.工程里面图片资源来自网络,如有侵权请联系我,马上删 ...

  3. Android -- 三种动画(帧动画、View动画、属性动画)

    Android的动画分为了三种, 分别是 帧动画.View动画.属性动画 一:帧动画 帧动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放. 帧动画的使用很简单,总 ...

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

    一.常用方法 onCreateOptionsMenu(Menu menu) 每次Activity一创建就会执行,一般只执行一次,创建并保留Menu的实例: //获取MenuInflaterMenuIn ...

  5. Android 三种动画 (帧动画 、补间动画、属性动画)

    1.帧动画 帧动画是依次展示n张静态图片,造成动画的错觉,类似看视频一样. 使用方式 在drawable目录下定义XML文件,根节点为animation-list,然后放入定义更好的图片 onesho ...

  6. android 三种定位方式

    最近在看android关于定位的方式,查了很多资料,也做了相关实验,在手机上做了测试,下面总结: 一共有三种定位方式,一种是GPS,一种是通过网络的方式,一种则是在基于基站的方式,但是,不管哪种方式, ...

  7. 个人网页主页设计(实现三种魔方展示效果)

    主页中融合了魔方的三种形态展示: 1.普通旋转(代码参考来源:https://www.icourse163.org/spoc/learn/HNKJ-1450726207?tid=1451210449# ...

  8. Android三种方式截取任意界面屏幕

    一.使用MediaProjectionManager Android5.0之后,开放截取屏幕的API,也就是利用MediaProjectionManager创建VirtualDisplay,传入与Im ...

  9. Android 三种动画的总结

    在看动画相关的代码的时候看到过 anim,animator 目录,资源文件中的有 <set> 作为根节点的,也有 <animate-list> 作为根节点的.虽然知道它们这是跟 ...

  10. android ViewPager 不带滑动效果切换item

    其实这是很简单的,但是今晚脑袋晕乎乎的 绕了一大圈,记录一下 以警同类人. 只需要在setCurrentItem传参数时这么写:mViewPager.setCurrentItem(item序号,fal ...

最新文章

  1. 预测----三个原则
  2. tomcat work目录的作用就是编译每个项目里的jsp文件为java文件如果项目没有jsp页面则这个项目文件夹为空...
  3. Mac安装code blocks以及解无法打开的问题
  4. 浅谈前端安全问题及策略
  5. 独立成分分析ICA系列1:意义
  6. 万字长文带你一文读完Effective C++
  7. SpringBoot实战(五)之Thymeleaf
  8. 备抵附加账户的期末余额_会计账户的分类(二)
  9. 直方图匹配(histogram matching):使两幅影像的色调保持一致
  10. 谈谈MacBook Air的电池问题
  11. RedHat6.4安装IBM MQ7.5
  12. php response.write,ASP_RESPONSE.WRITE和lt;%=%的区别,RESPONSE.WRITE与%=%都是ASP程 - phpStudy...
  13. 解决Android的adb命令行报错Permission denied
  14. ANDROID常用的命令(转载,后续自己完善)
  15. Linux能运行哪些行业软件,盘点支持Linux的经典Windows软件
  16. BP(BackPropagation)神经网络算法详解
  17. wex5 java_WeX5简介
  18. 【小程序云开发转uniCloud阿里云】
  19. 华为云对象存储连接测试
  20. 【BZOJ2069】ZAW(POI2004)-最短路+二进制分组

热门文章

  1. 2015职称计算机考试模拟,2015职称计算机考试《Dreamweaver》模拟试题(9)
  2. java重载静态方法_java – 使用静态和非静态方法重载的方法
  3. lgg8各个版本_LG正式推出G8SThinQ 搭载骁龙855
  4. 错误的参数个数或无效的参数属性值_数据处理-利用 python进行异常值分析
  5. linux启动mysql_允许远程连接到MySQL数据库服务器的步骤
  6. java filter param_Java过滤器Filter使用详解
  7. 能直接挂在iis的动静态网站_如何防止网站高并发引起的系统崩溃?
  8. linux ping raw socket -(signal),***之旅――原始套接字(Raw Socket)透析(3)--用Raw Socket实现Ping...
  9. gVerify:前端验证码插件
  10. SQL:postgresql中使用limit ... offset ... 实现分页查询