半透明dialog的应用

    下面我要说的是dialog用于展示Image,这点大家肯定都见过,新浪,网易,淘宝等等...

    下面简单说一下:

     首先自定义一个ImageDialog,这样好管理点.

    

     //自定义Dialog
public class ImageDialog extends Dialog {
private Window window = null;
private ImageView imageView;
private closeDialog closeDialog;

private Animation animation_in, animation_out;


public ImageDialog(Context context) {
super(context);
}


@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
        
doImage();
return false;
}


/***
* 图片操作
*/
public void doImage() {
animation_out = AnimationUtils.loadAnimation(getContext(),
R.anim.translate_out);
imageView.startAnimation(animation_out);
animation_out.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}


@Override
public void onAnimationRepeat(Animation animation) {


}


@Override
public void onAnimationEnd(Animation animation) {
dismiss();
}
});
}


public void showDialog(int layoutResID, int x, int y) {
window = getWindow(); // 得到对话框
window.requestFeature(Window.FEATURE_NO_TITLE);
setContentView(layoutResID);
windowDeploy(x, y);
imageView = (ImageView) window.findViewById(R.id.iv_imagedialog);
imageView.setImageResource(R.drawable.u7_normal);
animation_in = AnimationUtils.loadAnimation(getContext(),
R.anim.translate_in);
imageView.setAnimation(animation_in);
imageView.setBackgroundColor(color.black);
// 设置触摸对话框意外的地方取消对话框
setCanceledOnTouchOutside(true);
show();


imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
doImage();
}
});


//这个方法会执行两次,网上查了差说一次是up,一次是down,可是怎么拦截呢,知道的朋友麻烦给我说一下.
// this.setOnKeyListener(new OnKeyListener() {
// int i = 0;// 这会执行两次,一次是up,一次down
//
// @Override
// public boolean onKey(DialogInterface dialog, int keyCode,
// KeyEvent event) {
// if (keyCode == KeyEvent.KEYCODE_BACK
// && event.getRepeatCount() == 0) {
// i++;
// if (i == 2)
// doImage();
// }
//
// return true;
// }
// });

// 设置窗口显示
public void windowDeploy(int x, int y) {


// window.setWindowAnimations(R.style.dialogWindowAnim); // 设置窗口弹出动画
window.setBackgroundDrawableResource(R.color.transparent); // 设置对话框背景为透明
WindowManager.LayoutParams wl = window.getAttributes();
wl.width = x;
wl.height = y;
// wl.alpha = 0.8f;
// 根据x,y坐标设置窗口需要显示的位置
// wl.x = x; // x小于0左移,大于0右移
// wl.y = y; // y小于0上移,大于0下移
// wl.alpha = 0.6f; //设置透明度
// wl.gravity = Gravity.BOTTOM; //设置重力
window.setAttributes(wl);
}


然后在其他的activity中对图片进行执行

final ImageDialog dialog = new ImageDialog(this);

dialog.showDialog(R.layout.imagedialog, getWindowManager()
.getDefaultDisplay().getWidth(), getWindowManager()
.getDefaultDisplay().getHeight());

           

   之上就是简单的实现,我遇到的有几个问题:第一个是背景半透明,而图片不透明,通过对dialog的WindowManager.LayoutParams 的wl.alpha = 0.8f;这样会使得图片也变得透明,查了一下,如此简单就可以实现,

对于Button和ImageButton 还有一些View 设置半透明或者透明都是通过
2 android:background="#b0000000" 这是就是半透明
3 android:background="#00000000" 就是全透明
4 android:background="#FFFFFFFF" 就是不透明
5 介于中间的可以来自己设置透明度
这个是dialog的view配置文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#b0000000"
   >


    <ImageView
        android:id="@+id/iv_imagedialog"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


</LinearLayout>

   

如图:



随便找了个图片,看着不好看,不过效果就OK了.

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值