图片框架

Picasso:

导入依赖:

compile 'com.squareup.picasso:picasso:2.5.2'

MainActivity布局:

xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.mrzhao.day14picassoglideimgaeloaderproject.MainActivity">


            android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        


MainActivity代码:

/**
 * Picasso  图片加下载和缓存 框架
 * Square公司出产的   美国的一家高科技公司  主要做 移动支付的
 *
 *
 *1.在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题。
 *2.使用复杂的图片压缩转换来尽可能的减少内存消耗
 *3.自带内存和硬盘二级缓存功能
 * 底层的缓存功能使用的是LruCache类. 缓存路径默认是放在应用目录的cache/picasso-cache/
 */
public class MainActivity extends AppCompatActivity {

    private ImageView showIv;
    private String path = "http://img3.imgtn.bdimg.com/it/u=1783000275,3379371754&fm=27&gp=0.jpg";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 展示图片的视图
        showIv = (ImageView) findViewById(R.id.showIv);


        // 图片加载框  一步完成 图片下载的  过程
        // with的参数是 上下文对象    返回值是 一个Picasso  对象
        // load的参数是 图片下载的地址
        // into的参数是 显示图片的 视图
//        Picasso.with(this).load(path).into(showIv);


    }

    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.res_bt:
                //从  res/mipmap文件夹下的图片
                Picasso.with(this).load(R.mipmap.respic)
                        .config(Bitmap.Config.RGB_565)// 设置图片的格式   推荐RGB_565   Picasso 默认的是 ARGB8888
                        .resize(500, 500)// 重新定义 图片的大小
                        .centerInside()//等比例压缩到可显示
                        .rotate(345)//旋转
                        .noFade()//默认情况下 图片的出现和消失是有一个 淡入淡出的 效果的    该属性表示取消这个过程
//                        .centerCrop()// 剧中裁剪方式
//                        .fit() //自适应 需要ImageView 的 宽高是固定的
                        .into(showIv);
                break;
            case R.id.asset_bt:
                //Assets 文件夹 加载图片
                Picasso.with(this).load("file:///android_asset/assetspic.jpg").into(showIv);
                break;
            case R.id.net_bt:
                //从网络下载图片
                Picasso.with(this).load(path)
                        .placeholder(R.mipmap.loadingpic)// 占位图 图片下载过程中显示的图片
                        .error(R.mipmap.errorpic)//图片下载错误的时候 显示的图片
//                        .transform(new RoundTransformation())// 自定义图形转换
//                        .memoryPolicy(MemoryPolicy.NO_CACHE)// 缓存方面的处理 MemoryPolicy.NO_CACHE  不去缓存中查找 NO_STORE不去存储中查找
                        .into(showIv);
                break;
            case R.id.sd_bt:
                //从SD卡里面读取文件
                //w我们还没有学 SD 卡
                Picasso.with(this).load(new File("sd卡的路径")).into(showIv);
                break;
        }
    }

    // 正方形的转换
    class  MyTransformation implements Transformation{

        @Override
        public Bitmap transform(Bitmap source) {
            int size =  Math.min(source.getWidth(),source.getHeight());// 获取最小值
            Bitmap  map =  Bitmap.createBitmap(source,0,0,size,size);//正方形
            source.recycle();
            return map;
        }

        @Override
        public String key() {
            return "zhengfangxing";
        }
    }

    // 改成 椭圆了
    class  RoundTransformation implements Transformation{

        @Override
        public Bitmap transform(Bitmap source) {
            final Paint paint = new Paint();
            paint.setAntiAlias(true);
            paint.setShader(new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));

            Bitmap output = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(output);
            canvas.drawRoundRect(new RectF(0, 0, source.getWidth() - 0, source.getHeight() - 0), source.getWidth()/2, source.getWidth()/2, paint);

            if (source != output) {
                source.recycle();
            }

            return output;
        }

        @Override
        public String key() {
            return "yuanxing";
        }
    }

}

MyApp:

public class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

/**
 *
 * 我们可以 在这个地方针对  我们的 Picasso 做一个 统一的 改变
 */

        //构建一个 Picasso 对象
        Picasso picasso  = new Picasso.Builder(this)
                .defaultBitmapConfig(Bitmap.Config.RGB_565)//设置默认图片格式 RGB 565
                .memoryCache(new LruCache(this))// 设置缓存类型

                //红色表示图片来自网络
                //蓝色表示来自磁盘
                //绿色表示来自 内存
                .indicatorsEnabled(true)//开启图片测试的 效果
//                .downloader()// 表示的是使用什么下载器来去下载图片
                .build();

        // 设置 构建好的 自定义Picasso对象为单利模式
        // 然后其他地方调用的Picasso.with 方法返回的对象就是 构建好的Picasso对象了
        Picasso.setSingletonInstance(picasso);

    }
}

清单文件:

android:name="android.permission.INTERNET">
    android:name=".MyApp"

Glide:

导入依赖:

implementation 'com.github.bumptech.glide:glide:4.5.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.5.0'

MainActivity文件:

public class MainActivity extends AppCompatActivity {

    private String path ="http://pic28.photophoto.cn/20130827/0005018362405048_b.jpg";
    private ImageView showIv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        showIv = (ImageView) findViewById(R.id.showIv);
    }

    public void onClick(View view) {
        // 加载图片   剪切成为 圆形
        Glide.with(this).load(path)
                .apply(new RequestOptions().circleCrop())
                .into(showIv);
    }
}

UniversalImageLoader:

导入依赖:

compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

MainActivity:

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "TAG";
    private ImageView showIv;
    private String path ="http://h.hiphotos.baidu.com/zhidao/pic/item/09fa513d269759ee7206b59fb6fb43166d22df14.jpg";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化 只调用一次即可
        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).build();
        ImageLoader.getInstance().init(configuration);

        showIv = (ImageView) findViewById(R.id.showIv);

    }

    public void onClick(View view) {

        ImageLoader loader = ImageLoader.getInstance();


        // 展示图片
//        loader.displayImage(path, showIv);
        // 带监听器
        loader.displayImage(path, showIv, new DisplayImageOptions.Builder().build(), new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                Log.d(TAG, "onLoadingStarted: 图片开始下载");
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                Log.d(TAG, "onLoadingFailed: 图片下载失败");
            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                Log.d(TAG, "onLoadingComplete: 图片下载完成");
            }

            @Override
            public void onLoadingCancelled(String imageUri, View view) {
                Log.d(TAG, "onLoadingCancelled: 图片取消下载");
            }
        }, new ImageLoadingProgressListener() {
            @Override
            public void onProgressUpdate(String imageUri, View view, int current, int total) {
                Log.d(TAG, "onProgressUpdate: "+current+ "-------"+total);
            }
        });
    }
}

你可能感兴趣的:(Android课程练习,Android)