一 、图片加载库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'
}

// 详细使用自行百度吧, 真的好用, 支持多布局,  支持拖拽排序等等

 

六 、底部选择弹框(时间、类型、省市县等)

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();