Android常用第三方框架

  • 一 图片加载库Fresco

Github地址: https://github.com/facebook/fresco

// 1.添加依赖(最新已经更新到2.2.0)
api 'com.facebook.fresco:fresco:1.9.0'

// 2.清单文件中添加权限
<uses-permission android:name="android.permission.INTERNET" />

// 3.Application中初始化
Fresco.initialize(this);

// 4.布局文件中引用(更多设置自己百度哈)
<com.facebook.drawee.view.SimpleDraweeView
        android:layout_width="50dp" // 必须设置尺寸, 不支持wrap_content
        android:layout_height="50dp"
        app:actualImageScaleType="centerCrop"  // 实际尺寸缩放类型
        app:placeholderImage="@drawable/ic_default_user_logo"  // 占位图
        app:placeholderImageScaleType="centerCrop"  // 占位图缩放类型
        app:roundAsCircle="true"  // 设置圆形图片
        app:roundedCornerRadius="5dp" />  // 设置圆角图片

// 5.加载图片显示(三种方式)
simpleDraweeView.setImageURI("网络图片地址");
simpleDraweeView.setImageURI(Uri.fromFile(new File("文件管理中的图片地址")));
image.setImageResource(R.drawable."资源图片名");
  • 二 上拉加载下拉刷新框架(设置修改头部自行百度)

Github地址:https://github.com/scwang90/SmartRefreshLayout

// 1.添加依赖
api 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1'
api 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.5.1'

// 2.布局文件中使用
<com.scwang.smartrefresh.layout.SmartRefreshLayout
        android:id="@+id/refreshLayout"
        android:layout_width="@dimen/x0"
        android:layout_height="@dimen/y0"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        
</com.scwang.smartrefresh.layout.SmartRefreshLayout>

// 3.代码中使用
mRefreshLayout.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
        @Override
        public void onLoadMore(RefreshLayout refreshLayout) {
            // 上拉加载
            page++;
            requestList();
        }

        @Override
        public void onRefresh(RefreshLayout refreshLayout) {
            // 下拉刷新
            page = 1;
            requestList();
        }
});
// 数据返回之后停止下拉
mRefreshLayout.finishRefresh();
// 数据返回之后停止上拉
mRefreshLayout.finishLoadMore();
// 数据分页情况下, 当当前页大于等于总页数, 禁止上拉
if (page >= result.getPages()) {
      mRefreshLayout.setEnableLoadMore(false);
} else {
      mRefreshLayout.setEnableLoadMore(true);
}
  • 三 仿微信图片选择

Github地址:  https://github.com/LuckSiege/PictureSelector

// 1.1.添加依赖
api 'com.github.LuckSiege.PictureSelector:picture_library:v2.2.3'

// 1.2.项目gradle中
allprojects {
    repositories {
        jcenter()
        maven { url 'https://jitpack.io' }
        maven { url 'https://maven.google.com' }
    }
}

// 1.3.权限
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

// 2.调用相机相册(最简单的使用, 使用之前最好百度, 了解所有属性设置)
PictureSelector.create(this)
               .openGallery(PictureMimeType.ofImage())
               .forResult(PictureConfig.CHOOSE_REQUEST);

// 3.图片接收, 展示到UI界面 
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if (resultCode == RESULT_OK) {
          switch (requestCode) {
              case PictureConfig.CHOOSE_REQUEST:
                   // 图片选择结果回调
                   selectList = PictureSelector.obtainMultipleResult(data);
                   // LocalMedia 里面返回三种 path
                   // 1.media.getPath(); 为原图 path
                   // 2.media.getCutPath();为裁剪后 path,需判断 media.isCut();是否为 true
                   // 3.media.getCompressPath();为压缩后 path,需判断 media.isCompressed();是否为 true
                   // 如果裁剪并压缩了,以取压缩路径为准,因为是先裁剪后压缩的
                   for(int i = 0;i < selectList.size(); i++){
                       imagePaths.add(selectList.get(i).getPath());
                   }
                   mAdapter.notifyDataSetChanged();
                   break;
          }
      }
}
  • 四 屏幕适配方案(很多人都不知道的最佳适配方案)

Github地址: https://github.com/JessYanCoding/AndroidAutoSize

// 添加依赖
api 'me.jessyan:autosize:1.1.2'

// Application中配置(设置宽适配)
AutoSizeConfig.getInstance().setExcludeFontScale(true).setBaseOnWidth(true);

// 清单文件中设置UI图尺寸(单位是dp)
<meta-data
            android:name="design_width_in_dp"
            android:value="375" />
<meta-data
            android:name="design_height_in_dp"
            android:value="667" />
// 其实到这里适配就算完成了, 至于原理等多百度, 看看源码吧, 很简单。
  • 五 Recycler适配器封装

Github地址:  https://github.com/CymChad/BaseRecyclerViewAdapterHelper

// 依赖
allprojects {
   repositories {
       ...
       maven { url 'https://jitpack.io' }
   }
}
// 选择自己所需要的,AndroidX和Support不共存
dependencies {
  // 适用于AndroidX
  implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4'
  // 适用于Support
  api 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.42'
}

// 详细使用自行百度吧, 真的好用, 支持多布局,  支持拖拽排序(修改继承的BaseAdapter就可以)等等
  • 六 底部选择弹框(时间、类型、省市县等)

Github地址:  https://github.com/Bigkoo/Android-PickerView

// 添加依赖
compile 'com.contrarywind:Android-PickerView:4.1.9'

// 使用
// 时间选择器
TimePickerView pvTime = new TimePickerBuilder(MainActivity.this, new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date, View v) {
                     Toast.makeText(MainActivity.this, getTime(date), Toast.LENGTH_SHORT).show();
                  }
            }).build();

// 条件选择器
OptionsPickerView pvOptions = new OptionsPickerBuilder(MainActivity.this, new OnOptionsSelectListener() {
            @Override
            public void onOptionsSelect(int options1, int option2, int options3 ,View v) {
                //返回的分别是三个级别的选中位置
                String tx = options1Items.get(options1).getPickerViewText()
                        + options2Items.get(options1).get(option2)
                        + options3Items.get(options1).get(option2).get(options3).getPickerViewText();
                tvOptions.setText(tx);
            }
        }).build();
 pvOptions.setPicker(options1Items, options2Items, options3Items);
 pvOptions.show(); 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354