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

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

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

  先看下运行效果:

Android实现渐显按钮的左右滑动效果_第1张图片Android实现渐显按钮的左右滑动效果_第2张图片

  程序结构:

Android实现渐显按钮的左右滑动效果_第3张图片

  MainActivity文件中代码:

packagecom.android.buttonpageflipper;

importandroid.app.Activity;
importandroid.graphics.PixelFormat;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.view.Gravity;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.WindowManager;
importandroid.view.WindowManager.LayoutParams;
importandroid.widget.ImageView;
importandroid.widget.ViewFlipper;

/**
*Android实现带渐显按钮的左右滑动效果
*@Description:自然状态下按钮不可见,触摸屏幕时显示按钮
* *@FileName: MainActivity.java * *@Package com.android.buttonpageflipper *
*@Author Hanyonglu

*
*/
public classMainActivity extendsActivity{
// 声明两个按钮,分别代表向左和向右滑动
privateImageViewbtnLeft= null;
privateImageViewbtnRight= null;

// 设置WindowManager
privateWindowManagerwm= null;
privateWindowManager.LayoutParamswmParams= null;

// ImageView的alpha值
private intmAlpha=0;
private booleanisHide;

privateViewFlipperviewFlipper= null;

/** Calledwhentheactivityisfirstcreated. */
@Override
public voidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

setTitle("Android实现渐显按钮的左右滑动效果");
viewFlipper=(ViewFlipper) this.findViewById(R.id.myViewFlipper);

// 初始化左右按钮
initImageButtonView();
}

/**
*初始化悬浮按钮
*/
private voidinitImageButtonView(){
// 获取WindowManager
wm=(WindowManager)getApplicationContext().getSystemService("window");

// 设置LayoutParams相关参数
wmParams= newWindowManager.LayoutParams();

// 设置windowtype
wmParams.type=LayoutParams.TYPE_PHONE;

// 设置图片格式,效果为背景透明
wmParams.format=PixelFormat.RGBA_8888;

// 设置Windowflag参数
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 voidcreateLeftButtonView(){
btnLeft= newImageView( this);
btnLeft.setImageResource(R.drawable.left);
btnLeft.setAlpha(0);

btnLeft.setOnClickListener( newView.OnClickListener(){
public voidonClick(Viewarg0){
// 上一个图像
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 voidcreateRightButtonView(){
btnRight= newImageView( this);
btnRight.setImageResource(R.drawable.right);
btnRight.setAlpha(0);

btnRight.setOnClickListener( newView.OnClickListener(){
public voidonClick(Viewarg0){
// 下一个图像
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);
}

/**
*设置按钮渐显效果
*/
privateHandlermHandler= newHandler()
{
public voidhandleMessage(Messagemsg){
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 voidshowImageButtonView(){
isHide= false;
mHandler.sendEmptyMessage(1);
}

private voidhideImageButtonView(){
newThread(){
public voidrun(){
try{
Thread.sleep(1500);
isHide= true;
mHandler.sendEmptyMessage(0);
} catch(Exceptione){
;
}
}
}.start();
}

@Override
public booleanonTouchEvent(MotionEventevent){
switch(event.getAction()){
caseMotionEvent.ACTION_MOVE:
caseMotionEvent.ACTION_DOWN:
showImageButtonView();
break;
caseMotionEvent.ACTION_UP:
hideImageButtonView();
break;
}

return true;
}

@Override
public voidonDestroy(){
super.onDestroy();
// 在程序退出(Activity销毁)时销毁窗口
wm.removeView(btnLeft);
wm.removeView(btnRight);
}

}

  main.xml文件中代码:

<?xmlversion="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文件中代码:

<? xmlversion="1.0"encoding="utf-8" ?>

<setxmlns:android="http://schemas.android.com/apk/res/android">
<translateandroid:fromXDelta="100%p"android:toXDelta="0"
android:duration="500"/>
<alphaandroid:fromAlpha="0.1"android:toAlpha="1.0"
android:duration="500"/>

</set>

  push_left_out.xml文件中代码:

<? xmlversion="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文件中代码:

<? xmlversion="1.0"encoding="utf-8" ?>

<setxmlns:android="http://schemas.android.com/apk/res/android">
<translateandroid:fromXDelta="-100%p"android:toXDelta="0"
android:duration="500"/>
<alphaandroid:fromAlpha="0.1"android:toAlpha="1.0"
android:duration="500"/>

</set>

  push_right_out.xml文件中代码:

<? xmlversion="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>

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

  希望转载的朋友能够尊重作者的劳动成果,加上转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/02/13/2350171.html谢谢。

  示例下载:点击下载

  结束。 ^_^

更多相关文章

  1. android 成长 UI 学习之 Activity 透明,半透明效果的设置transpar
  2. Gears Android WIFI/基站定位源代码分析
  3. 安卓学习(初)第三章(2)(《第一行代码》)
  4. 《第一行代码Android》阅读笔记
  5. android绘图Path类仿加速球水面波动效果
  6. Android 图像按钮ImageButton

随机推荐

  1. Android自定制Toast显示外观
  2. Android 全景框架了解
  3. 学习笔记(三)UI开发之一
  4. Android下java方法和JS方法的互调
  5. Android中的内存使用状况统计
  6. Android的Layout整理
  7. winxp下j2me环境,android,nokiaSdk的配置
  8. maven管理android项目 环境搭建
  9. android和java中常见 Exception
  10. Android中的onWindowFocusChanged()方法