Android创建一个WebImageView
2016-03-02 15:22
417 查看
Android创建一个WebImageView
这个WebImageView的主要功能就是一个:指定一个URI,这个控件去延迟加载并显示在该控件的位置上。。在Github上,这种类似的框架已经非常多并且非常的具有性能性。。 本篇博文只是使用此实例简单的帮助大家理解一下这方面的工作原理。
效果图就不贴了,跟ImageView一模一样。。
内部的主要逻辑实现:
自定义控件,继承于ImageView, 内部实现一个叫做setImageBackground(String uri)的方法,定义一个内部类AsyncTask进行访问之后再设置给ImageView就好了。。 (注意: 需要加入访问网络的权限、)
整体的逻辑都说完了,就直接上代码吧。
1、继承于ImageView
public class WebImageView extends ImageView让这个控件具有ImageView的所有能力。
2、定义成员属性
private Drawable mDrawable;
主要就是用来在setImageBackground系列方法中进行引用背景的对象,要不要这个无所谓 。
3、实现系列的setImageBackground方法
为什么说系列呢, 无论如何也不能让这个控件简单的只有给uri的时候才有用啊, 要不然就是个负担。。public void setImageBackground(Drawable mDrawable) { this.mDrawable = mDrawable; setImageDrawable(this.mDrawable); } public void setImageBackground(int resultId) { mDrawable = getResources().getDrawable(resultId); setImageDrawable(mDrawable); } public void setImageBackground(String url) { MyAsyncTask mAsyncTask = new MyAsyncTask(); mAsyncTask.execute(url); }
通过这三个方法可以看出,支持三种赋值方案, 内部调用的setImageDrawable是原本的ImageView这个控件所提供的原生方法。
在接受的参数为url的时候可以看出是使用了一个AsyncTask类进行的网络访问(因为AsyncTask可以很有效的进行ui线程逻辑处理,所以此处不采用Thread+Handler处理。
MyAsyncTask是一个WebImageView的内部类、AsyncTask过于基础不进行讲解,直接给出代码。
private class MyAsyncTask extends AsyncTask<String, Void, Bitmap> { @Override protected Bitmap doInBackground(String... params) { String url = params[0]; try { HttpURLConnection mConnection = (HttpURLConnection) (new URL(url)).openConnection(); InputStream is = mConnection.getInputStream(); return BitmapFactory.decodeStream(is); } catch (Exception ex) { ex.printStackTrace(); return null; } } @Override protected void onPostExecute(Bitmap result) { mDrawable = new BitmapDrawable(getResources(), result); if (mDrawable != null) { setImageBackground(mDrawable); } } }
当然啦,代码也没有技术含量,本篇博文主要就是想告诉大家这个框架的大概结构. 练习可以采用这个写法。
相关文章推荐
- Android常用代码之APK root权限静默安装
- Android6.0的phone应用源码分析(6)——RIL层框架分析
- Android Studio ——Service的生命周期
- android浅析1---android系统构架
- Fragment初解
- Android 计时器
- android4.0 以后关于DatePicker的显示问题
- Android AccessibilityService 使用详解
- Android 项目目录结构
- Android drawable 的setBounds(0, 5, dip2px(20), dip2px(20)) 方法
- 记一次EditText设置默认选中setSelection的一个bug
- android:inputType参数类型说明
- Android Studio + JNI 实践~入门第一步
- mac os x上 android apk 反编译
- android修改开机动画和铃声
- Android ListView异步加载图片乱序问题,原因分析及解决方案(二)
- Libgdx仿安卓R文件通过Id访问资源
- Android的bitmap和优化
- android 如何计算PopupWindow宽和高
- android dpi dip px