android 按钮并排左右_Android实现渐显按钮的左右滑动效果

写一个简单的代码:

WindowManager mWm =

(WindowManager)getSystemService(Context.WINDOW_SERVICE);

Button view = new

Button(this);

view.setText("window manager

test!");

WindowManager.LayoutParams

mParams = new WindowManager.LayoutParams(); mWm.addView(view,

mParams);

我们这个button的显示和当前的运行环境基本上是无关的,当前是什么Activity或者是桌面,使用这个底层的结果给我们的编程带来很大的灵活性,但是要注意,显示出来就要销毁掉,这个是必须滴,销毁其实也就是一个remove方法。

但是仅仅这样子写会有个问题,就是view显示在最上层,但是后面的view无法获取焦点,当我们touch的坐标超出上次view的范围时

mParams = new

WindowManager.LayoutParams();

mWm.updateViewLayout(view,mParams);

需要后面的view获取焦点时:

mParams.flags =

WindiwManager.LayoutParams.FLAG_NOT_TOUCHABLE

|

WINDOWMANAGER>LAYOUTPARAMS.FLAG_NOT_FOCUSABLE;

mWm.updateViewLayout(view,mParams);

package com.lin.ui;

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;

public class ButtonDrag

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;

@Override

public void

onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.drag);

setTitle("Android实现渐显按钮的左右滑动效果");

viewFlipper =

(ViewFlipper)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.ic_launcher);

btnLeft.setAlpha(0);

btnLeft.setOnClickListener(new View.OnClickListener() {

public void onClick(View

arg0) {

// 上一个图像

viewFlipper

.setInAnimation(ButtonDrag.this, R.anim.push_left_in);

viewFlipper.setOutAnimation(ButtonDrag.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.ic_launcher);

btnRight.setAlpha(0);

btnRight.setOnClickListener(new View.OnClickListener() {

public void onClick(View

arg0) {

// 下一个图像

viewFlipper.setInAnimation(ButtonDrag.this,

R.anim.push_right_in);

viewFlipper.setOutAnimation(ButtonDrag.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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值