Android图谱(个人记录)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jjjjjj123321/article/details/77369216

最近想搞一个图谱app出来,主要记录各个知识点,流行的框架的使用,这篇文章也是为了以做笔记形式写的

暂时打算分为下面几个部分:


四大组件

UI

Net

DynamicLoad

Cache

Database

Framework

扫描二维码关注公众号,回复: 4422034 查看本文章

JNI

AIDL

优秀轮子

待补充


下面开始细分


四大组件

Activity

Service

Content Provider

BroadCast Receiver

UI

ImageView

BitmapConfig类:可以解码图片,将resource解码成bitmap对象
AlPHA_8
ARGB_4444(过时,弃用)
ARGB_8888(有透明度) size几乎是RGB_565的两倍
RGB_565(无透明度)
BitmapCompressFormate:定义bitmap以文件存储的压缩格式
PNG(无损压缩,有透明度)
JPEG(有损压缩,无透明度)
WEBP(有损,谷歌推荐代替JPEG的,压缩率为它的三分之二,主要用于网络等)
Bitmap
构造方法是被native层调用的,只能通过Bitmapfactory的decodeXXXX方法获得一个bitmap对象

大图加载
下面是对较大图片进行加载的通用做法,先获取到image的size大小,通过,injustdecodebounds来只获取边界大小信息
再decodefile,获得options参数
最后获得到的width和height来进行图片的 缩放
(注意:由于解析加载本地图片时间不确定,特别时间比较多时候,容易造成ANR,建议开线程处理)
public static Bitmap decodeSampledBitmapFromFile(String filename,  
            int reqWidth, int reqHeight) {  
  
        // First decode with inJustDecodeBounds=true to check dimensions  
        final BitmapFactory.Options options = new BitmapFactory.Options();  
        options.inJustDecodeBounds = true;  
        BitmapFactory.decodeFile(filename, options);  
  
        // Calculate inSampleSize  
        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);  
  
        // Decode bitmap with inSampleSize set  
        options.inJustDecodeBounds = false;  
        return BitmapFactory.decodeFile(filename, options);  
    } 
BitmapRegionDecoder
加载巨型图片,还要保证他的size的话,可以使用谷歌提供的类
使用也是非常的简单,获取到图片流或者location,定义要显示的区域位置
如下
        mImageView = (ImageView) findViewById(R.id.id_imageview);  
        try  
        {  
            InputStream inputStream = getAssets().open("tangyan.jpg");  
  
            //获得图片的宽、高  
            BitmapFactory.Options tmpOptions = new BitmapFactory.Options();  
            tmpOptions.inJustDecodeBounds = true;  
            BitmapFactory.decodeStream(inputStream, null, tmpOptions);  
            int width = tmpOptions.outWidth;  
            int height = tmpOptions.outHeight;  
  
            //设置显示图片的中心区域  
            BitmapRegionDecoder bitmapRegionDecoder = BitmapRegionDecoder.newInstance(inputStream, false);  
            BitmapFactory.Options options = new BitmapFactory.Options();  
            options.inPreferredConfig = Bitmap.Config.RGB_565;  
            Bitmap bitmap = bitmapRegionDecoder.decodeRegion(new Rect(width / 2 - 100, height / 2 - 100, width / 2 + 100, height / 2 + 100), options);  
            mImageView.setImageBitmap(bitmap);  
  
  
        } catch (IOException e)  
        {  
            e.printStackTrace();  
        }  
具体特大图,需要做的滑动查看其它区域,可以参考这篇博文:
http://blog.csdn.net/zuo8787/article/details/51406986

放大缩小等各种手势

说之前大家要明白单点与多点的区别:

单手指操作:ACTION_DOWN---ACTION_MOVE----ACTION_UP

多手指操作:ACTION_DOWN---ACTION_POINTER_DOWN---ACTION_MOVE--ACTION_POINTER_UP---ACTION_UP.

这种手势缩放操作,一般就是监听到手势变化值,在对应刷新图片,具体操作可以参考下面两篇博文:

http://blog.csdn.net/lmj623565791/article/details/39474553

http://blog.csdn.net/jj120522/article/details/8467810

常用轮子
推荐几款好用的轮子:
UniversalmageLoader(不推荐) https://github.com/nostra13/Android-Universal-Image-Loader
优点:部分解决OOM和listview图片错乱,内存缓存,磁盘缓存,使用 Lru算法进行缓存
缺点:停止维护,不推荐使用
Picassohttps://github.com/square/picasso
优点:方便,一句话搞定
Picasso.with(this).load("url").placeholder(R.mipmap.ic_default).into(imageView);
缓存使用的也是LRU算法,线程池对于2/3/4g网络有了不通的表现和优化
缺点:Picasso框架没有实现磁盘缓存,配合OkHttp进行实现。
Glidehttps://github.com/bumptech/glide
优点:基于Piscasso,优点他都有,还进行了大量优化,比如,图片使用的是RGB_565,而Piscasso使用的 ARGB_8888 格式,这个内存开销要小一半。
磁盘缓存优化:Picasso 只会缓存原始尺寸的图片,而 Glide 缓存的是多种规格,也就意味着 Glide 会根据你 ImageView 的大小来缓存相应大小的
图片尺寸,比如你 ImageView 大小是200*200,原图是 400*400 ,而使用 Glide 就会缓存 200*200 规格的图,而 Picasso 只会缓存 400*400 规格的。
支持gif图片
缺点:包较大,500k,Piscasso只有100k

Fresco:https://github.com/facebook/fresco 优点:OOM优化非常好,从native层优化的,缺点:包较大,除非是专业图片app,否则推荐glide或者Piscasso

ListView

ListView
RecyclerView
优化

自定义View

绘制view
绘制text

SurfaceView

动画

帧动画
补间动画
属性动画

dialog

Fragment

Material Design

Webview



Net

http请求

消息推送,长连接

图片下载优化

音频视频流

App更新



DynamicLoad

热更

DynamicLoadAPK

VirtualAPK

DroidPlugin



Cache

图片缓存

其他缓存



Framework

拦截器框架

动态代理框架

路由框架



JNI



AIDL



优秀轮子

Lottie

GreenDao

未完待续



猜你喜欢

转载自blog.csdn.net/jjjjjj123321/article/details/77369216