Dialog运用与返回键的拦截.

       Dialog运用与返回键的拦截._第1张图片     Dialog运用与返回键的拦截._第2张图片   

               新   浪                                                    淘  宝

       开发中,会经常用dialog显示,可是对dialog 返回的监听,很少运用. 比如:新浪微博,淘宝等等,用来显示图片,都是点击一下出来,新浪还好,对dialog 点击事件监听,淘宝更离谱,只有点击返回剪才可以退出.


 示例:
 Dialog运用与返回键的拦截._第3张图片          Dialog运用与返回键的拦截._第4张图片     Dialog运用与返回键的拦截._第5张图片

                    微博界面                                    点击加载图片                                       动画ing...

  Dialog运用与返回键的拦截._第6张图片         Dialog运用与返回键的拦截._第7张图片         Dialog运用与返回键的拦截._第8张图片

                                  
               动画执行结束                       点击图片或者点击back按钮                                 动画执行结束 
    第一种实现方法:
    效果很简单,就是我们建一个普通的dialog 渲染我们要展示的图片,我们只需要对图片进行动画,这点大家都比较熟悉,就不多说了.
    我要说明的一点是:我们点击返回键的时候需要控制dialog 里面图片消失的动画,这点怎么控制呢,平常对于dialog 就一闪就没了。
   我们要借住dialog的一些监听接口:setOnKeyListener();
                            dialog.setOnKeyListener(new OnKeyListener() {
int i;// 用于控制按下和抬起动作
@Override
public boolean onKey(DialogInterface dialog1,
int keyCode, KeyEvent event) {
i++;
if (i == 2
&& keyCode == KeyEvent.KEYCODE_BACK)
imageView_H
.startAnimation(animation_out);
animation_out
.setAnimationListener(animationListener);




return true;
}
});
     为什么要创建变量i呢,因为我们执行这个方法会执行2遍,为什么呢,机制问题,小弟新手,查了下是说 down,up两个事件,可是我在着脸拦截dialog.onKeyDown(keyCode, event); 执行两次都为true,而dialog.onKeyUp(keyCode, event);两次都为false,查了好久没有解决,所以就用本方法,自己控制吧,所以就创建了一个变量,不过目的是让只执行一次,其实也是up的时候执行,不过效果实现就ok了,
    第二种方法:
    我们创建一个集成dialog的自定义dialog类.
     
      public class Mydialog extends AlertDialog
    {




public Mydialog(Context context) {
super(context);
// TODO Auto-generated constructor stub
}


public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_BACK )
{
imageView_H.startAnimation(animation_out);
animation_out.setAnimationListener(animationListener);.
}
return super.onKeyDown(keyCode, event);
}
   
    }
  我建议大家用第二种方法,比较直观一点. 有什么比较好的方法可以给我说下,谢谢在先了。
   


   

    

   

你可能感兴趣的:(新浪微博,Class,animation,UP,dialog,Constructor)