Android技术分享交流区Android技术知识

android 首页弹窗

2016-08-27  本文已影响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 中  上层点击事件会被中断,弹框会有黑边

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

上一篇下一篇

猜你喜欢

热点阅读