android 首页弹窗

作者: 那年风一般过 | 来源:发表于2016-08-27 16:19 被阅读426次

    现在很多app  登录首页都会有首页弹窗的功能,最近公司也紧跟潮流需求提出要做首页弹窗

    上效果图

    思路简单

    1.登录app  时请求网络通过接口获取数据


    公司自己定的网络框架异步的网络请求 

    remote.requestText(req.getRequestMethod(), null,req.toJsonString(), newTextTaskCallback() {

    @Override

    protectedResponseDatacreateResponseData(String jsonObj) {

    return new ResponseData();

    }

    @Override

    protected voidsuccess( Result pojo) {

    result= pojo;

    finalDataInfo data =result.getData();

    if(data !=null&& data.getId() !=null) {

    LogUtil.v("首页弹窗图片地址:"+data.getPicture());

    //图片没有显示过需要处理,如果图片显示过则不处理

    if(data.getId()!=applicationPreference.getHomeDialogId()) {

    if(!data.getCache()){//如果是不缓存的,直接下载

    downloadImage();

    }else{

    //如果要是缓存的,文件存在直接显示,文件不存在则下载

    File file = getFileFullName(data.getId());

    if(file.exists()) {//如果图片存在

    showDialog1(file);

    }else{//图片不存在,下载图片

    downloadImage();

    }

    }

    });

    2.下载图片downloadImage();

    newThread() {

    @Override

    public voidrun() {

    DataInfo data =result.getData();

    String image_url = data.getPicture();

    File file=getFileFullName(data.getId());

    URL url;

    try{

    url =newURL(image_url);

    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    conn.setConnectTimeout(5000);

    conn.setRequestMethod("GET");

    conn.setDoInput(true);

    // 获取本地文件

    if(!file.getParentFile().exists()) {

    file.getParentFile().mkdirs();

    }

    intcode = conn.getResponseCode();

    if(code ==200) {

    // 下载图片

    InputStream is = conn.getInputStream();

    FileOutputStream fos =newFileOutputStream(file);

    byte[] buffer =new byte[1024];

    intlen =0;

    while((len = is.read(buffer)) != -1) {

    fos.write(buffer,0,len);

    }

    is.close();

    fos.close();

    Message msg =newMessage();

    msg.what=0;

    msg.obj= file;

    下载完了发消息

    handler.sendMessage(msg);

    }else{

    LogUtil.e("下载首页弹窗图片失败,服务端返回代码:"+ code);

    }

    }catch(Exception e) {

    file.delete();

    e.printStackTrace();

    LogUtil.e("下载首页弹窗图片失败,服务端返回代码:"+ e.getMessage());

    }

    }

    }.start();

    3.最关键的布局中显示

    因为在framelayout 中  上层点击事件会被中断

    WindowManager windowManager = ((Activity)mContext).getWindowManager();

    Display display = windowManager.getDefaultDisplay();

    floatwidth = display.getWidth() /10*8;

    Bitmap image = BitmapFactory.decodeFile(file.getPath());

    floatheight = (float) width / image.getWidth() * image.getHeight();

    //弹窗样式无黑边

    finalDialog dialog =newDialog(mContext,R.style.dialog);

    LayoutInflater inflater = LayoutInflater.from(mContext);

    View layout = inflater.inflate(R.layout.dialog_home, null);

    ViewGroup.LayoutParams lp =newViewGroup.LayoutParams((int) width,(int) height);

    dialog.setContentView(layout,lp);

    dialog.setOnShowListener(newDialogInterface.OnShowListener() {

    @Override

    public voidonShow(DialogInterface dialog) {

    applicationPreference.setHomeDialogId(result.getData().getId());

    }

    });

    dialog.show();

    弹框会有黑边解决方案:

    总结看似简单,还是有不少坑的。framelayout 中  上层点击事件会被中断,弹框会有黑边

    都好了不少时间,第一次写 ,感觉好乱。。。

    相关文章

      网友评论

      本文标题:android 首页弹窗

      本文链接:https://www.haomeiwen.com/subject/vsttettx.html