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

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

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

  先看下运行效果:

  

  程序结构:

  MainActivity文件中代码:

  1.  
  2. package com.android.buttonpageflipper;
  3.  
  4. import android.app.Activity;
  5. import android.graphics.PixelFormat;
  6. import android.os.Bundle;
  7. import android.os.Handler;
  8. import android.os.Message;
  9. import android.view.Gravity;
  10. import android.view.MotionEvent;
  11. import android.view.View;
  12. import android.view.WindowManager;
  13. import android.view.WindowManager.LayoutParams;
  14. import android.widget.ImageView;
  15. import android.widget.ViewFlipper;
  16.  
  17. /**
  18.  * Android实现带渐显按钮的左右滑动效果
  19.  * @Description: 自然状态下按钮不可见,触摸屏幕时显示按钮
  20.  *
  21.  * @FileName: MainActivity.java 
  22.  *
  23.  * @Package com.android.buttonpageflipper 
  24.  *
  25.  * @Author Hanyonglu
  26.  *
  27.  */
  28. public class MainActivity extends Activity {
  29.     //声明两个按钮,分别代表向左和向右滑动
  30.     private ImageView btnLeft=null;
  31.     private ImageView btnRight=null;
  32.     
  33.     //设置WindowManager
  34.     private WindowManager wm=null;
  35.     private WindowManager.LayoutParams wmParams=null;
  36.     
  37.     //ImageView的alpha值   
  38.     private int mAlpha = 0;
  39.     private boolean isHide;
  40.     
  41.     private ViewFlipper viewFlipper = null;
  42.     
  43.     /** Called when the activity is first created. */
  44.     @Override
  45.     public void onCreate(Bundle savedInstanceState) {
  46.         super.onCreate(savedInstanceState);
  47.         setContentView(R.layout.main);
  48.         
  49.         setTitle("Android实现渐显按钮的左右滑动效果");
  50.         viewFlipper = (ViewFlipper) this.findViewById(R.id.myViewFlipper);
  51.         
  52.         //初始化左右按钮
  53.         initImageButtonView();
  54.     }
  55.     
  56.     /**
  57.      * 初始化悬浮按钮
  58.      */
  59.     private void initImageButtonView(){
  60.         //获取WindowManager
  61.         wm=(WindowManager)getApplicationContext().getSystemService("window");
  62.         
  63.         //设置LayoutParams相关参数
  64.         wmParams = new WindowManager.LayoutParams();
  65.         
  66.         //设置window type
  67.         wmParams.type=LayoutParams.TYPE_PHONE;   
  68.         
  69.         //设置图片格式,效果为背景透明
  70.         wmParams.format=PixelFormat.RGBA_8888;   
  71.         
  72.         //设置Window flag参数
  73.          wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL 
  74.                                | LayoutParams.FLAG_NOT_FOCUSABLE;
  75.  
  76.         //设置x、y初始值
  77.         wmParams.x=0;
  78.         wmParams.y=0;
  79.         
  80.         //设置窗口长宽数据
  81.         wmParams.width=50;
  82.         wmParams.height=50;
  83.         
  84.         //创建左右按钮
  85.         createLeftButtonView();
  86.         createRightButtonView();
  87.     }
  88.     
  89.     /**
  90.      * 设置左边按钮
  91.      */
  92.     private void createLeftButtonView(){
  93.         btnLeft=new ImageView(this);
  94.         btnLeft.setImageResource(R.drawable.left);
  95.         btnLeft.setAlpha(0);
  96.         
  97.         btnLeft.setOnClickListener(new View.OnClickListener() {    
  98.             public void onClick(View arg0) {
  99.                 //上一个图像
  100.                 viewFlipper.setInAnimation(MainActivity.this, R.anim.push_left_in);
  101.                 viewFlipper.setOutAnimation(MainActivity.this, R.anim.push_left_out);
  102.                 viewFlipper.showPrevious();
  103.             }
  104.         });
  105.         
  106.         //调整窗口
  107.         wmParams.gravity=Gravity.LEFT|Gravity.CENTER_VERTICAL;
  108.         
  109.         //显示图像
  110.         wm.addView(btnLeft, wmParams);
  111.     }
  112.     
  113.     /**
  114.      * 设置右边按钮
  115.      */
  116.     private void createRightButtonView(){
  117.         btnRight=new ImageView(this);
  118.         btnRight.setImageResource(R.drawable.right);
  119.         btnRight.setAlpha(0);
  120.         
  121.         btnRight.setOnClickListener(new View.OnClickListener() {    
  122.             public void onClick(View arg0) {
  123.                 //下一个图像
  124.                 viewFlipper.setInAnimation(MainActivity.this, R.anim.push_right_in);
  125.                 viewFlipper.setOutAnimation(MainActivity.this, R.anim.push_right_out);
  126.                 viewFlipper.showNext();
  127.             }
  128.         });
  129.         
  130.         //调整窗口
  131.         wmParams.gravity=Gravity.RIGHT|Gravity.CENTER_VERTICAL;
  132.         
  133.         //显示图像
  134.         wm.addView(btnRight, wmParams);
  135.     }
  136.     
  137.     /**
  138.      * 设置按钮渐显效果
  139.      */
  140.     private Handler mHandler = new Handler()
  141.     {
  142.         public void handleMessage(Message msg) {
  143.             if(msg.what==1 && mAlpha<255){           
  144.                 //通过设置不透明度设置按钮的渐显效果
  145.                 mAlpha += 50;
  146.                 
  147.                 if(mAlpha>255)
  148.                     mAlpha=255;
  149.                 
  150.                 btnLeft.setAlpha(mAlpha);
  151.                 btnLeft.invalidate();
  152.                 btnRight.setAlpha(mAlpha);
  153.                 btnRight.invalidate();
  154.                 
  155.                 if(!isHide && mAlpha<255)
  156.                     mHandler.sendEmptyMessageDelayed(1, 100);
  157.             }else if(msg.what==0 && mAlpha>0){
  158.                 mAlpha -= 10;
  159.                 
  160.                 if(mAlpha<0)
  161.                     mAlpha=0;
  162.                 btnLeft.setAlpha(mAlpha);
  163.                 btnLeft.invalidate();
  164.                 btnRight.setAlpha(mAlpha);
  165.                 btnRight.invalidate();
  166.                 
  167.                 if(isHide && mAlpha>0)
  168.                     mHandler.sendEmptyMessageDelayed(0, 800);
  169.             }            
  170.         }
  171.     };
  172.     
  173.     private void showImageButtonView(){
  174.         isHide = false;
  175.         mHandler.sendEmptyMessage(1);
  176.     }
  177.     
  178.     private void hideImageButtonView(){
  179.         new Thread(){
  180.             public void run() {
  181.                 try {
  182.                     Thread.sleep(1500);
  183.                     isHide = true;
  184.                     mHandler.sendEmptyMessage(0);
  185.                 } catch (Exception e) {
  186.                     ;
  187.                 }
  188.             }
  189.         }.start();
  190.     }
  191.     
  192.     @Override
  193.     public boolean onTouchEvent(MotionEvent event) {
  194.         switch (event.getAction()) {
  195.             case MotionEvent.ACTION_MOVE:
  196.             case MotionEvent.ACTION_DOWN:
  197.                 showImageButtonView();            
  198.                 break;
  199.             case MotionEvent.ACTION_UP:
  200.                 hideImageButtonView();                
  201.                 break;
  202.         }
  203.         
  204.         return true;
  205.     }
  206.  
  207.     @Override
  208.     public void onDestroy(){
  209.         super.onDestroy();
  210.         //在程序退出(Activity销毁)时销毁窗口
  211.         wm.removeView(btnLeft);
  212.         wm.removeView(btnRight);
  213.     }
  214. }  

  main.xml文件中代码:

  1.  
  2. <?xml version="1.0" encoding="utf-8"?>
  3.  
  4.  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical">
  5.     <ViewFlipper 
  6.         android:id="@+id/myViewFlipper"
  7.         android:layout_width="fill_parent" 
  8.         android:layout_height="fill_parent">
  9.         <!-- 第一个页面 -->
  10.         <LinearLayout 
  11.             android:layout_width="fill_parent"
  12.             android:layout_height="fill_parent" 
  13.             android:gravity="center">
  14.             <ImageView 
  15.                 android:layout_width="wrap_content"
  16.                 android:layout_height="wrap_content" 
  17.                 android:src="@drawable/one" 
  18.                 android:gravity="center" />
  19.         </LinearLayout>
  20.         <!-- 第二个页面 -->
  21.         <LinearLayout 
  22.             android:layout_width="fill_parent"
  23.             android:layout_height="fill_parent" 
  24.             android:gravity="center">
  25.             <ImageView 
  26.                 android:layout_width="wrap_content"
  27.                 android:layout_height="wrap_content" 
  28.                 android:src="@drawable/two"
  29.                 android:gravity="center" />
  30.         </LinearLayout>
  31.         <!-- 第三个页面 -->
  32.         <LinearLayout 
  33.             android:layout_width="fill_parent"
  34.             android:layout_height="fill_parent" 
  35.             android:gravity="center">
  36.             <ImageView 
  37.                 android:layout_width="wrap_content"
  38.                 android:layout_height="wrap_content" 
  39.                 android:src="@drawable/three"
  40.                 android:gravity="center" />
  41.         </LinearLayout>
  42.         <!-- 第四个页面 -->
  43.         <LinearLayout 
  44.             android:layout_width="fill_parent"
  45.             android:layout_height="fill_parent" 
  46.             android:gravity="center">
  47.             <ImageView 
  48.                 android:layout_width="wrap_content"
  49.                 android:layout_height="wrap_content" 
  50.                 android:src="@drawable/four"
  51.                 android:gravity="center" />
  52.         </LinearLayout>
  53.         <!-- 第五个页面 -->
  54.         <LinearLayout 
  55.             android:layout_width="fill_parent"
  56.             android:layout_height="fill_parent" 
  57.             android:gravity="center">
  58.             <ImageView 
  59.                 android:layout_width="wrap_content"
  60.                 android:layout_height="wrap_content" 
  61.                 android:src="@drawable/five"
  62.                 android:gravity="center" />
  63.         </LinearLayout>
  64.     </ViewFlipper>
  65. </LinearLayout>

  push_left_in.xml文件中代码:

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

  push_left_out.xml文件中代码:

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

  push_right_in.xml文件中代码:

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

  push_right_out.xml文件中代码:

  1.  
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <set xmlns:android="http://schemas.android.com/apk/res/android">
  4.     <translate android:fromXDelta="0" android:toXDelta="100%p"
  5.         android:duration="500" />
  6.     <alpha android:fromAlpha="1.0" android:toAlpha="0.1"
  7.         android:duration="500" />
  8. </ 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. linux 挂在新硬盘

    记录一下    全忘了..... PS 测试服务器的主板太差劲了,没有多余的电源接口,只能把光驱的电源拿出来,才能让硬盘使用.把硬盘装好后,我们用 fdisk -l 查看下: 图中可以看出 /dev/ ...

  2. 配置Nginx反向代理服务器

    一.主要配置文件:/etc/nginx/nginx.conf 内容如下图 扩展配置文件:/etc/nginx/conf.d/*.conf 图中的主配置文件的末尾,加载所有扩展配置文件里面以.conf结 ...

  3. 带SSL证书的httpclient 远程接口工具类

    package com.iups.wx.util; import java.io.IOException; import java.io.UnsupportedEncodingException; i ...

  4. Select the JavaScript graphing libraries you would like to compare

    Select the JavaScript graphing libraries you would like to compare:             Overview Summary Fus ...

  5. BI项目中的ETL设计详解(数据抽取、清洗与转换 )(转载)

    原文:http://www.cnblogs.com/reportmis/p/5939732.html ETL是BI项目最重要的一个环节,通常情况下ETL会花掉整个项目的1/3的时间,ETL设计的好坏直 ...

  6. JavaScript 兼容各大浏览器阻止冒泡事件

    JavaScript 兼容各大浏览器阻止冒泡事件 function stopEvent(event) { //阻止冒泡事件 //取消事件冒泡 var e = arguments.callee.call ...

  7. Python 导出数据from Mysql

    环境 Anaconda3 Python 3.6, Window 64bit 目的 从MySQL数据库读取目标表数据,并处理 代码 # -*- coding: utf-8 -*- import pand ...

  8. Makefile的补充学习

    通配符%和Makefile自动推导(规则)(1)%是Makefile中的通配符,代表一个或几个字母.也就是说%.o就代表所有以.o为结尾的文件.(2)所谓自动推导其实就是Makefile的规则.当Ma ...

  9. Linux命令四

    作业一: 1) 开启Linux系统前添加一块大小为20G的SCSI硬盘 2) 开启系统,右击桌面,打开终端 安装的是命令行界面 3) 为新加的硬盘分区,一个主分区大小为10G,剩余空间给扩展分区,在扩 ...

  10. windows下memcached安装以及php_memcache.dll扩展

    http://kimi.it/258.html http://kimi.it/259.html https://www.cnblogs.com/elenaPeng/p/6877530.html htt ...