相逢意气为君饮,系马高楼垂柳边。这篇文章主要讲述安卓开发:SmartImageView简单实现和应用相关的知识,希望能为你提供帮助。
通常从服务器端获取的图片是URL地址,如果简单地通过URL地址获取图片?
有一个开源项目:SmartImageView,做到了这个功能,同时还有其他功能,下载不便,过于庞大
这里自己实现它的这个简单功能
代码:
package org.dreamtech.smartimageview; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.widget.ImageView; public class MySmartImageView extends ImageView {protected static final int REQUESTSUCCESS = 1; protected static final int REQUESTFAIL = 2; protected static final int ERROR = 3; @SuppressLint("HandlerLeak") private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {switch (msg.what) { case REQUESTSUCCESS: Bitmap bitmap = (Bitmap) msg.obj; MySmartImageView.this.setImageBitmap(bitmap); break; case REQUESTFAIL:int default_resource = (Integer) msg.obj; MySmartImageView.this.setBackgroundResource(default_resource); break; case ERROR: int resource = (Integer) msg.obj; MySmartImageView.this.setBackgroundResource(resource); break; }}; }; // The construction methods of the parent class public MySmartImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); }public MySmartImageView(Context context, AttributeSet attrs) { super(context, attrs); }public MySmartImageView(Context context) { super(context); }// A method of displaying pictures // path:The parameters of URL transmission public void setImageUrl(final String path) { new Thread() { public void run() {try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url .openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); int code = conn.getResponseCode(); if (code == 200) { InputStream in = conn.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(in); Message msg = Message.obtain(); msg.obj = bitmap; handler.sendMessage(msg); } } catch (Exception e) { e.printStackTrace(); }}; }.start(); }// A method of displaying pictures(Overloading method) // path:The parameters of URL transmission // resource:Default resources(If you can‘t find a resource through this URL) public void setImageUrl(final String path, final int resource) {new Thread() { public void run() {try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url .openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); int code = conn.getResponseCode(); if (code == 200) { InputStream in = conn.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(in); Message msg = Message.obtain(); msg.what = REQUESTSUCCESS; msg.obj = bitmap; handler.sendMessage(msg); } else { Message msg = Message.obtain(); msg.what = REQUESTFAIL; msg.obj = resource; handler.sendMessage(msg); } } catch (Exception e) { Message msg = Message.obtain(); msg.what = ERROR; msg.obj = resource; handler.sendMessage(msg); }}; }.start(); }}
两个重载方法:
1:明确URL地址正确、不会失误,直接调用
2:防止图片URL出错,设置默认资源,传两个参数
【安卓开发(SmartImageView简单实现和应用)】
测试下:
package org.dreamtech.smartimageview; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MySmartImageView iv = (MySmartImageView) findViewById(R.id.iv); iv.setImageUrl( "http://fanyi.bdstatic.com/static/translation/img/header/logo_cbfea26.png", R.drawable.default_ic); }}
布局:
< RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > < org.dreamtech.smartimageview.MySmartImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> < /RelativeLayout>
这里是一个正确地URL地址,结果如下:
![安卓开发(SmartImageView简单实现和应用)](http://img.readke.com/220503/0149395342-0.jpg)
文章图片
接下来,我把URL地址改成错误的:
结果:
![安卓开发(SmartImageView简单实现和应用)](http://img.readke.com/220503/0149393D9-1.jpg)
文章图片
好的,完成!
推荐阅读
- app 压力测试
- Android 深入浅出 - monkey压力测试
- Android 深入浅出 - 进程生命周期(Process Lifecycle)
- 为啥Word只能用安全模式打开?Word不用安全模式打开的办法
- 如何处理WinXP光驱自动弹出的问题?
- WinXP页面提示Sysfader iexplore.exe应用程序出错的处理办法
- WinXP系统打开页面出现乱码的处理办法
- WinXP系统虚拟内存最小值太低怎样办?
- WinXP系统收藏夹备份的办法