首页 > 其他分享 >Android实现渐显按钮的左右滑动效果

Android实现渐显按钮的左右滑动效果

时间:2022-10-06 11:32:49浏览次数:53  
标签:layout mAlpha 渐显 gravity private 按钮 import Android android


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

关于滑动效果,在我的上一篇博文中提到过,有兴趣的朋友可以访问

如果大家想实现带指引效果的左右滑动,请访问博


先看下运行效果:

Android实现渐显按钮的左右滑动效果_exception

Android实现渐显按钮的左右滑动效果_encoding_02

程序结构:

Android实现渐显按钮的左右滑动效果_layout_03

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实现带渐显按钮的左右滑动效果
* 自然状态下按钮不可见,触摸屏幕时显示按钮
* @author Administrator
*
*/
public class MainActivityextends 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"?>
<LinearLayoutxmlns: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">
<translateandroid: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">
<translateandroid: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">
<translateandroid: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">
<translateandroid:fromXDelta="0" android:toXDelta="100%p"
android:duration="500"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.1"
android:duration="500"/>
</set>






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


标签:layout,mAlpha,渐显,gravity,private,按钮,import,Android,android
From: https://blog.51cto.com/jdsjlzx/5733508

相关文章

  • Android闪屏示例程序
     用过手机QQ的基本上都知道,刚启动程序时候会在一个界面停留一会,按任意键的就直接跳过,这就是所谓的闪屏。那么,在Android中怎样实现这样的效果呢? 1、新建一个Android项目,命......
  • Android实现图片倒影效果
    ​​android倒影实现抖动的镜面效果​​​​http://clareshao.iteye.com/blog/1419695​​android中的gallery的一个样式,具有倒影效果。左右滑动也不错。​​http://down......
  • Android开发--构建项目安装包APK(debug版)
    1.build→BuildAPK(s),点击即可构建2.点击日志可以查看构建情况3.点击locate即可进入debug文件夹4.也可以在构建完成后直接按照路径找到debug文件夹其中apk文件即所需安装......
  • Android类加载流程
    背景由于前前前阵子写了个壳,得去了解类的加载流程,当时记了一些潦草的笔记。这几天把这些东西简单梳理了一下,本文分析的代码基于Android8.1.0源码。流程分析从loadClass......
  • 对话框完全显示后,马上执行一个按钮的事件
                                                                              何志丹 对......
  • Tubian Linux 0.45,兼容Windows和Android的国产Linux系统!
    Github主页(提供下载):https://github.com/jinshulumengchuang/Tubian-Linux123网盘下载:https://www.123pan.com/s/XjkKVv-JO9Uvhttps://www.123pan.com/s/XjkKVv-BO9Uvhtt......
  • 关于Android开发工具的下载之ADT篇
    ADT的下载首先可以选择下面推荐的两个网站去下载相应的安装包,网址如下:http://tools.android-studio.org/index.php/adt-bundle-plugin或者http://www.androiddevtools.......
  • 面向初学者的 Android 应用开发基础知识
    Android是一个基本上为手机构建的操作系统。它基于LinuxKernel和其他开源软件,由Google开发。它用于智能手机和平板电脑等触摸屏移动设备。但现在这些都用于AndroidAuto......
  • 5种设计有效按钮的最佳做法
    英文| https://uxplanet.org/5-best-practices-for-designing-effective-buttons-71a4a33e6d26翻译|web前端开发公众号按钮是创建流畅对话的重要元素。对我来说,一位伟大......
  • Android系统10 RK3399 init进程启动(四十) 开机自启动脚本init.rc执行逻辑框架
    说明系统:Android10.0设备:FireFlyRK3399(ROC-RK3399-PC-PLUS)前言这个章节我们开始学习新的知识点,init.rc相关概念,也就是Android开机自启动的脚本,这个脚本能启动shell脚......