Created
May 27, 2013 05:22
-
-
Save JackCho/5655309 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.sh.yeshine.widget; | |
import android.content.Context; | |
import android.graphics.Bitmap; | |
import android.graphics.drawable.Drawable; | |
import android.net.Uri; | |
import android.util.AttributeSet; | |
import android.widget.ImageView; | |
public class AsycnImageView extends ImageView { | |
private AsycnImageViewTask aivt; | |
private int bitmap_W; | |
private int bitmap_H; | |
private int MAX_W; | |
private int MAX_H; | |
private int MIN_W; | |
private int MIN_H; | |
private Context c; | |
public AsycnImageView(Context context) { | |
super(context); | |
this.c = context; | |
} | |
public AsycnImageView(Context arg0, AttributeSet arg1) { | |
super(arg0, arg1); | |
this.c = arg0; | |
} | |
public AsycnImageView(Context arg0, AttributeSet arg1, int arg2) { | |
super(arg0, arg1, arg2); | |
this.c = arg0; | |
} | |
@Override | |
public void setImageBitmap(Bitmap bm) { | |
cancel(); | |
super.setImageBitmap(bm); | |
/** 获取图片宽高 **/ | |
bitmap_W = bm.getWidth(); | |
bitmap_H = bm.getHeight(); | |
MAX_W = bitmap_W * 3; | |
MAX_H = bitmap_H * 3; | |
MIN_W = bitmap_W / 2; | |
MIN_H = bitmap_H / 2; | |
} | |
@Override | |
public void setImageDrawable(Drawable drawable) { | |
cancel(); | |
super.setImageDrawable(drawable); | |
} | |
@Override | |
public void setImageURI(Uri uri) { | |
cancel(); | |
super.setImageURI(uri); | |
} | |
@Override | |
public void setImageResource(int resId) { | |
cancel(); | |
super.setImageResource(resId); | |
} | |
@Override | |
public void setBackgroundDrawable(Drawable d) { | |
cancel(); | |
super.setBackgroundDrawable(d); | |
} | |
@Override | |
public void setBackgroundResource(int resid) { | |
cancel(); | |
super.setBackgroundResource(resid); | |
} | |
@Override | |
public void setBackgroundColor(int color) { | |
cancel(); | |
super.setBackgroundColor(color); | |
} | |
public void setAsycnImageView(String url) { | |
try { | |
cancel(); | |
aivt = new AsycnImageViewTask(c, this, url); | |
aivt.execute(); | |
} catch (Exception e) { | |
} catch (Error e) { | |
} | |
} | |
public void setAsycnImageView(String url, int type) { | |
try { | |
cancel(); | |
aivt = new AsycnImageViewTask(c, this, url, type); | |
aivt.execute(); | |
} catch (Exception e) { | |
} catch (Error e) { | |
} | |
} | |
public void setMyMap(String url, BitmapCallBack callBack) { | |
try { | |
cancel(); | |
aivt = new AsycnImageViewTask(c, callBack, url); | |
aivt.execute(); | |
} catch (Exception e) { | |
} catch (Error e) { | |
} | |
} | |
private void cancel() { | |
if (aivt != null) { | |
aivt.cancel(true); | |
aivt = null; | |
} | |
} | |
public interface BitmapCallBack { | |
public void asycnIVset(Bitmap b); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.sh.yeshine.widget; | |
import java.lang.ref.SoftReference; | |
import java.net.URL; | |
import java.util.Map; | |
import com.sh.yeshine.activity.R; | |
import com.sh.yeshine.temp.Temp; | |
import com.sh.yeshine.util.Download; | |
import com.sh.yeshine.widget.AsycnImageView.BitmapCallBack; | |
import android.content.Context; | |
import android.graphics.Bitmap; | |
import android.graphics.BitmapFactory; | |
import android.os.AsyncTask; | |
import android.util.DisplayMetrics; | |
import android.util.Log; | |
import android.view.WindowManager; | |
public class AsycnImageViewTask extends AsyncTask<Object, Void, String> { | |
private AsycnImageView iv; | |
private String url; | |
private Bitmap bitmap; | |
private BitmapFactory.Options sDefaultOptions; | |
private int type = -1; | |
private DisplayMetrics dm; | |
private LoadingDialog dialog; | |
private Context c; | |
private BitmapCallBack call; | |
// 图阅详情使用 | |
public AsycnImageViewTask(Context c, BitmapCallBack call, String url) { | |
this.call = call; | |
this.url = url; | |
WindowManager wm = (WindowManager) c | |
.getSystemService(Context.WINDOW_SERVICE); | |
dm = new DisplayMetrics(); | |
wm.getDefaultDisplay().getMetrics(dm); | |
sDefaultOptions = new BitmapFactory.Options(); | |
sDefaultOptions.inJustDecodeBounds = false; | |
sDefaultOptions.inSampleSize = 1; | |
} | |
public AsycnImageViewTask(Context c, AsycnImageView iv, String url, int type) { | |
super(); | |
this.type = type; | |
this.iv = iv; | |
this.url = url; | |
WindowManager wm = (WindowManager) c | |
.getSystemService(Context.WINDOW_SERVICE); | |
dm = new DisplayMetrics(); | |
wm.getDefaultDisplay().getMetrics(dm); | |
sDefaultOptions = new BitmapFactory.Options(); | |
sDefaultOptions.inJustDecodeBounds = false; | |
sDefaultOptions.inSampleSize = 3; | |
} | |
public AsycnImageViewTask(Context c, AsycnImageView iv, String url) { | |
super(); | |
this.c = c; | |
this.iv = iv; | |
this.url = url; | |
sDefaultOptions = new BitmapFactory.Options(); | |
// sDefaultOptions.inJustDecodeBounds = true; | |
// sDefaultOptions.inDither = true; | |
// sDefaultOptions.inScaled = true; | |
// sDefaultOptions.inSampleSize = 5; | |
sDefaultOptions.inJustDecodeBounds = false; | |
sDefaultOptions.inSampleSize = 3; | |
} | |
@Override | |
protected String doInBackground(Object... params) { | |
if (Temp.imageCache.containsKey(url)) { | |
SoftReference<Bitmap> sr = Temp.imageCache.get(url); | |
if (sr!= null) { | |
bitmap = sr.get(); | |
} else { | |
Temp.imageCache.remove(url); | |
bitmap = loadImageFromUrl(url); | |
} | |
} else { | |
bitmap = loadImageFromUrl(url); | |
} | |
return null; | |
} | |
@Override | |
protected void onCancelled() { | |
super.onCancelled(); | |
} | |
@Override | |
protected void onPostExecute(String result) { | |
dialog.dismiss(); | |
if (bitmap != null) { | |
if (call != null) { | |
call.asycnIVset(bitmap); | |
} else{ | |
iv.setImageBitmap(bitmap); | |
} | |
} | |
} | |
@Override | |
protected void onPreExecute() { | |
super.onPreExecute(); | |
dialog = LoadingDialog.getInstance(c, R.style.dialog); | |
dialog.show(); | |
} | |
public Bitmap loadImageFromUrl(String url) { | |
Bitmap b = Download.readBitmap(url,sDefaultOptions); | |
if (b == null) { | |
try { | |
// if (type != -1) { | |
// sDefaultOptions = new BitmapFactory.Options(); | |
// sDefaultOptions.inJustDecodeBounds = false; | |
// sDefaultOptions.inDither = true; | |
// sDefaultOptions.inScaled = true; | |
// sDefaultOptions.inTargetDensity = 1; | |
// sDefaultOptions.outWidth = dm.widthPixels; | |
// sDefaultOptions.outHeight = bitmap.getHeight() | |
// * dm.widthPixels / bitmap.getWidth(); | |
// } | |
b = BitmapFactory.decodeStream(new URL(url).openStream(), null, | |
sDefaultOptions); | |
Log.e("test", "b为空"); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
Temp.imageCache.put(url, new SoftReference<Bitmap>(b)); | |
return b; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.sh.yeshine.util; | |
import java.io.File; | |
import java.io.FileInputStream; | |
import java.io.FileNotFoundException; | |
import java.io.FileOutputStream; | |
import java.io.IOException; | |
import java.io.InputStream; | |
import java.net.HttpURLConnection; | |
import java.net.MalformedURLException; | |
import java.net.URL; | |
import org.apache.http.HttpEntity; | |
import org.apache.http.HttpResponse; | |
import org.apache.http.client.ClientProtocolException; | |
import org.apache.http.client.HttpClient; | |
import org.apache.http.client.methods.HttpGet; | |
import org.apache.http.impl.client.DefaultHttpClient; | |
import com.sh.yeshine.temp.Temp; | |
import android.graphics.Bitmap; | |
import android.graphics.BitmapFactory; | |
import android.graphics.BitmapFactory.Options; | |
/** | |
* 下载 | |
* | |
* @author Administrator | |
* | |
*/ | |
public class Download { | |
/** | |
* | |
* @param imageurl | |
* 下载链接 | |
* @param sDefaultOptions | |
* @param name | |
* 图片名称 | |
* @return | |
*/ | |
public static Bitmap downloadBitmap(String imageurl, Options sDefaultOptions) { | |
File f = new File(Temp.rootFile, "/picture/"); | |
if (!f.exists()) { | |
f.mkdirs(); | |
} | |
String[] split = imageurl.split("/"); | |
Bitmap bitmap = null; | |
try { | |
HttpGet hg = new HttpGet(imageurl); | |
HttpClient hc = new DefaultHttpClient(); | |
HttpResponse hr = hc.execute(hg); | |
HttpEntity he = hr.getEntity(); | |
InputStream is = he.getContent(); | |
sDefaultOptions.inPreferredConfig = Bitmap.Config.RGB_565; | |
bitmap = BitmapFactory.decodeStream(is,null,sDefaultOptions); | |
File fl = new File(f, split[split.length - 1]); | |
FileOutputStream fos = new FileOutputStream(fl); | |
bitmap.compress(Bitmap.CompressFormat.PNG, 50, fos); | |
fos.flush(); | |
fos.close(); | |
is.close(); | |
} catch (ClientProtocolException e) { | |
e.printStackTrace(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
return bitmap; | |
} | |
public static File downloadDetail(String imageurl) { | |
File f = new File(Temp.rootFile, "/picture/"); | |
if (!f.exists()) { | |
f.mkdirs(); | |
} | |
File fl = null; | |
try { | |
String[] split = imageurl.split("/"); | |
fl = new File(f, split[split.length - 1]); | |
HttpGet hg = new HttpGet(imageurl); | |
HttpClient hc = new DefaultHttpClient(); | |
InputStream is = hc.execute(hg).getEntity().getContent(); | |
FileOutputStream fos = new FileOutputStream(fl); | |
byte[] b = new byte[1024]; | |
int read = is.read(b); | |
while (read != -1) { | |
fos.write(b, 0, read); | |
read = is.read(b); | |
} | |
fos.flush(); | |
fos.close(); | |
is.close(); | |
} catch (ClientProtocolException e) { | |
e.printStackTrace(); | |
} catch (IllegalStateException e) { | |
e.printStackTrace(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
return fl; | |
} | |
/** | |
* | |
* @param sDefaultOptions | |
* @param name | |
* 图片名称 | |
* @return | |
*/ | |
public static Bitmap readBitmap(String imageurl, Options sDefaultOptions) { | |
File f = new File(Temp.rootFile, "/picture/"); | |
if (!f.exists()) { | |
f.mkdirs(); | |
} | |
String[] split = imageurl.split("/"); | |
Bitmap bitmap = null; | |
File f1 = new File(f, split[split.length - 1]); | |
if (!f1.exists()) { | |
HttpURLConnection con = null; | |
try { | |
URL u = new URL(imageurl); | |
con = (HttpURLConnection) u.openConnection(); | |
con.connect(); | |
} catch (MalformedURLException e) { | |
e.printStackTrace(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
if (f1.length() != con.getContentLength()) { | |
return downloadBitmap(imageurl,sDefaultOptions); | |
} else { | |
return bitmap; | |
} | |
} | |
try { | |
FileInputStream fis = new FileInputStream(f1); | |
sDefaultOptions.inPreferredConfig = Bitmap.Config.RGB_565; | |
// sDefaultOptions.inPurgeable = true; | |
// sDefaultOptions.inInputShareable = true; | |
sDefaultOptions.inSampleSize = 1; | |
bitmap = BitmapFactory.decodeStream(fis,null,sDefaultOptions); | |
fis.close(); | |
} catch (FileNotFoundException e) { | |
e.printStackTrace(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
return bitmap; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment