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

先看下运行效果:

15500aM8-0.jpg  

155009C34-1.jpg

程序结构:

15500a434-2.jpg

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文件中代码:

复制代码 代码如下:

android:id="@+id/myviewflipper"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="center">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/one"

android:gravity="center" />

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="center">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/two"

android:gravity="center" />

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="center">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/three"

android:gravity="center" />

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="center">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/four"

android:gravity="center" />

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="center">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/five"

android:gravity="center" />

push_left_in.xml文件中代码:

复制代码 代码如下:

android:duration="500" />

android:duration="500" />

push_left_out.xml文件中代码:

复制代码 代码如下:

android:duration="500" />

android:duration="500" />

push_right_in.xml文件中代码:

复制代码 代码如下:

android:duration="500" />

android:duration="500" />

push_right_out.xml文件中代码:

复制代码 代码如下:

android:duration="500" />

android:duration="500" />

set>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值