package com.su.testimageview;import com.su.testimageview.AsyncImageLoader.ImageCallback;import android.app.Activity;import android.content.Context;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.widget.ImageView;public class TestImageViewActivity extends Activity {public static Context context;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);context = this;ImageView imageView = (ImageView) findViewById(R.id.imageView1);AsyncImageLoader asyncImageLoader = new AsyncImageLoader();Drawable asyndrawable = asyncImageLoader.loadDrawable(// 直接从url获取drawable"http://avatar.csdn.net/7/C/8/1_sfshine.jpg", imageView,new ImageCallback() {//callback方法不用变public void imageLoaded(Drawable imageDrawable,ImageView imageView, String imageUrl) {imageView.setImageDrawable(imageDrawable);}});imageView.setImageDrawable(asyndrawable);// 设置成获取的drawable.}}



package com.su.testimageview;import java.lang.ref.SoftReference;import java.util.HashMap;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.drawable.Drawable;import android.os.Handler;import android.os.Message;import android.widget.ImageView;public class AsyncImageLoader {// SoftReference是软引用,是为了更好的为了系统回收变量private HashMap<String, SoftReference<Drawable>> imageCache;public AsyncImageLoader() {imageCache = new HashMap<String, SoftReference<Drawable>>();}/** *  * @param imageUrl *            图片网址 * @param imageView *            所要显示图片的imageview * @param imageCallback *            实现一个callback 比较固定 * @return */public Drawable loadDrawable(final String imageUrl,final ImageView imageView, final ImageCallback imageCallback) {if (imageCache.containsKey(imageUrl)) {// 从缓存中获取SoftReference<Drawable> softReference = imageCache.get(imageUrl);Drawable drawable = softReference.get();if (drawable != null) {return drawable;}}final Handler handler = new Handler() {public void handleMessage(Message msg) {imageCallback.imageLoaded((Drawable) msg.obj, imageView,imageUrl);}};// 建立新一个新的线程下载图片new Thread() {public void run() {Drawable drawable = null;try {// 指定大小的图片不进行圆角处理if (imageUrl.endsWith("/160") || imageUrl.endsWith("/460")) {drawable = ImageUtil.getDrawableFromUrl(imageUrl);} else {drawable = ImageUtil.geRoundDrawableFromUrl(imageUrl, 7);}} catch (Exception e) {// TODO Auto-generated catch block// 为空时处理默认图片Bitmap bm = BitmapFactory.decodeResource(TestImageViewActivity.context.getResources(),R.drawable.ic_launcher);drawable = ImageUtil.byteToDrawable(ImageUtil.Bitmap2Bytes(ImageUtil.toRoundCorner(bm, 7)));e.printStackTrace();}imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));Message msg = handler.obtainMessage(0, drawable);handler.sendMessage(msg);}}.start();return null;}// 回调接口public interface ImageCallback {public void imageLoaded(Drawable imageDrawable, ImageView imageView,String imageUrl);}}

package com.su.testimageview;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.ColorMatrix;import android.graphics.ColorMatrixColorFilter;import android.graphics.Paint;import android.graphics.PixelFormat;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.RectF;import android.graphics.Bitmap.Config;import android.graphics.PorterDuff.Mode;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;/** * 图片圆角处理 */public class ImageUtil {public static InputStream getRequest(String path) throws Exception {URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5000);if (conn.getResponseCode() == 200) {return conn.getInputStream();}return null;}public static byte[] readInputStream(InputStream inStream) throws Exception {ByteArrayOutputStream outStream = new ByteArrayOutputStream();byte[] buffer = new byte[4096];int len = 0;while ((len = inStream.read(buffer)) != -1) {outStream.write(buffer, 0, len);}outStream.close();inStream.close();return outStream.toByteArray();}public static Drawable loadImageFromUrl(String url) {// TODO Auto-generated method stubURL u;InputStream i = null;try {u = new URL(url);i = (InputStream) u.getContent();} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}Drawable d = Drawable.createFromStream(i, "src");return d;}public static Drawable getDrawableFromUrl(String url) throws Exception {return Drawable.createFromStream(getRequest(url), null);}public static Bitmap getBitmapFromUrl(String url) throws Exception {byte[] bytes = getBytesFromUrl(url);return byteToBitmap(bytes);}public static Bitmap getRoundBitmapFromUrl(String url, int pixels)throws Exception {byte[] bytes = getBytesFromUrl(url);Bitmap bitmap = byteToBitmap(bytes);return toRoundCorner(bitmap, pixels);}public static Drawable geRoundDrawableFromUrl(String url, int pixels)throws Exception {byte[] bytes = getBytesFromUrl(url);BitmapDrawable bitmapDrawable = (BitmapDrawable) byteToDrawable(bytes);return toRoundCorner(bitmapDrawable, pixels);}public static byte[] getBytesFromUrl(String url) throws Exception {return readInputStream(getRequest(url));}public static Bitmap byteToBitmap(byte[] byteArray) {if (byteArray.length != 0) {return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);} else {return null;}}public static Drawable byteToDrawable(byte[] byteArray) {ByteArrayInputStream ins = new ByteArrayInputStream(byteArray);return Drawable.createFromStream(ins, null);}public static byte[] Bitmap2Bytes(Bitmap bm) {ByteArrayOutputStream baos = new ByteArrayOutputStream();bm.compress(Bitmap.CompressFormat.PNG, 100, baos);return baos.toByteArray();}public static Bitmap drawableToBitmap(Drawable drawable) {Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight(),drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565);Canvas canvas = new Canvas(bitmap);drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());drawable.draw(canvas);return bitmap;}/** * 图片去色,返回灰度图片 *  * @param bmpOriginal *            传入的图片 * @return 去色后的图片 */public static Bitmap toGrayscale(Bitmap bmpOriginal) {int width, height;height = bmpOriginal.getHeight();width = bmpOriginal.getWidth();Bitmap bmpGrayscale = Bitmap.createBitmap(width, height,Bitmap.Config.RGB_565);Canvas c = new Canvas(bmpGrayscale);Paint paint = new Paint();ColorMatrix cm = new ColorMatrix();cm.setSaturation(0);ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);paint.setColorFilter(f);c.drawBitmap(bmpOriginal, 0, 0, paint);return bmpGrayscale;}/** * 去色同时加圆角 *  * @param bmpOriginal *            原图 * @param pixels *            圆角弧度 * @return 修改后的图片 */public static Bitmap toGrayscale(Bitmap bmpOriginal, int pixels) {return toRoundCorner(toGrayscale(bmpOriginal), pixels);}/** * 把图片变成圆角 *  * @param bitmap *            需要修改的图片 * @param pixels *            圆角的弧度 * @return 圆角图片 */public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) {Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), Config.ARGB_8888);Canvas canvas = new Canvas(output);final int color = 0xff424242;final Paint paint = new Paint();final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());final RectF rectF = new RectF(rect);final float roundPx = pixels;paint.setAntiAlias(true);canvas.drawARGB(0, 0, 0, 0);paint.setColor(color);canvas.drawRoundRect(rectF, roundPx, roundPx, paint);paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));canvas.drawBitmap(bitmap, rect, rect, paint);return output;}/** * 使圆角功能支持BitampDrawable *  * @param bitmapDrawable * @param pixels * @return */public static BitmapDrawable toRoundCorner(BitmapDrawable bitmapDrawable,int pixels) {Bitmap bitmap = bitmapDrawable.getBitmap();bitmapDrawable = new BitmapDrawable(toRoundCorner(bitmap, pixels));return bitmapDrawable;}}

http://dl.vmall.com/c0bcaq4bed

更多相关文章

  1. android 从系统相册获取一张图片
  2. android WebView加载URL不显示图片
  3. android 使用randerScript实现图片模糊效果
  4. android 给图片加水印
  5. Android: 利用Bimap,canvas处理图片(画直线)
  6. 【Android】ImageMap,图片地图
  7. Android Stdio实现点击按钮出现图片
  8. android图片异步加载 列表

随机推荐

  1. 百度地图 Android(安卓)SDK - 新的版本号
  2. Android(安卓)SDK更新困难解决方法
  3. android adb常用命令集
  4. Android之AIDL使用解析
  5. Android(安卓)启动页白屏 快速解决
  6. Android(安卓)Studio 单元测试入门
  7. android 调试工具ADB介绍
  8. android绘图 报表----aChartEngine图表显
  9. Android之Application简介
  10. 在s5pv210开发板linux平台上移植mplayer-