服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - 如何在Android中实现渐显按钮的左右滑动效果

如何在Android中实现渐显按钮的左右滑动效果

2021-01-28 15:49Android开发网 Android

本篇文章是对在Android中实现渐显按钮的左右滑动效果进行了详细的分析介绍,需要的朋友参考下

先看下运行效果:

如何在Android中实现渐显按钮的左右滑动效果  如何在Android中实现渐显按钮的左右滑动效果

程序结构:

如何在Android中实现渐显按钮的左右滑动效果

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>


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

延伸 · 阅读

精彩推荐
  • AndroidAndroid CardView+ViewPager实现ViewPager翻页动画的方法

    Android CardView+ViewPager实现ViewPager翻页动画的方法

    本篇文章主要介绍了Android CardView+ViewPager实现ViewPager翻页动画的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Abby代黎明9592022-03-02
  • AndroidAndroid界面效果UI开发资料汇总(附资料包)

    Android界面效果UI开发资料汇总(附资料包)

    android ui界面设计,友好的界面会提高用户体验度;同时也增强了android ui界面设计的难度,本文提供了一些常用开发资料(有下载哦)感兴趣的朋友可以了解下...

    Android开发网4652021-01-03
  • AndroidAndroid程序设计之AIDL实例详解

    Android程序设计之AIDL实例详解

    这篇文章主要介绍了Android程序设计的AIDL,以一个完整实例的形式较为详细的讲述了AIDL的原理及实现方法,需要的朋友可以参考下...

    Android开发网4622021-03-09
  • AndroidAndroid实现Service获取当前位置(GPS+基站)的方法

    Android实现Service获取当前位置(GPS+基站)的方法

    这篇文章主要介绍了Android实现Service获取当前位置(GPS+基站)的方法,较为详细的分析了Service基于GPS位置的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    Ruthless8332021-03-31
  • Android汇总Android视频录制中常见问题

    汇总Android视频录制中常见问题

    这篇文章主要汇总了Android视频录制中常见问题,帮助大家更好地解决Android视频录制中常见的问题,需要的朋友可以参考下...

    yh_thu5192021-04-28
  • AndroidAndroid编程解析XML方法详解(SAX,DOM与PULL)

    Android编程解析XML方法详解(SAX,DOM与PULL)

    这篇文章主要介绍了Android编程解析XML方法,结合实例形式详细分析了Android解析XML文件的常用方法与相关实现技巧,需要的朋友可以参考下...

    liuhe68810042021-05-03
  • AndroidAndroid实现固定屏幕显示的方法

    Android实现固定屏幕显示的方法

    这篇文章主要介绍了Android实现固定屏幕显示的方法,实例分析了Android屏幕固定显示所涉及的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    鉴客6182021-03-27
  • AndroidAndroid中AsyncTask详细介绍

    Android中AsyncTask详细介绍

    这篇文章主要介绍了Android中AsyncTask详细介绍,AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合,需要的朋友可以参考下...

    Android开发网7432021-03-11