图片缩放库--PhotoView的基本使用

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

PhotoView 的简介:

  这是一个图片查看库,实现图片浏览功能,支持pinch(捏合)手势或者点击放大缩小。支持在View Pager中翻页浏览图片。 
  PhotoView 是一款扩展自AndroidImageView,支持通过单点/多点触摸来进行图片缩放的智能控件。功能实用和强大。

PhotoView 的功能:

· 图片浏览查看 
· 双指缩放 
· 单点触摸缩放 
· 图片缩放模式设置

根据一个PhotoViewDemo来说明一下:

添加PhotoView库和ImageLoader库的gradle依赖:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile 'com.github.chrisbanes.photoview:library:1.2.4'
    compile 'com.zftlive.android.library:feature-android-imageloader:1.0.0'
}


添加网络权限:

    <uses-permission android:name="android.permission.INTERNET"/>


创建assets文件夹,添加图片xin.png:



创建BaseApplication类继承自Application,用于ImageLoader库的配置:

package com.example.dpl.photoviewdemo;

import android.app.Application;
import android.graphics.Bitmap;
import android.os.Environment;

import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;

import java.io.File;

/**
 * Created by dpl on 2017/10/5 0005.
 */

public class BaseApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoaderConfiguration config;
        config = new ImageLoaderConfiguration.Builder(this)// 开始构建 ,图片加载配置
                .threadPriority(Thread.NORM_PRIORITY - 2)// 设置线程优先级
                .threadPoolSize(3)// 线程池内加载的数量 ;减少配置之中线程池的大小,(.threadPoolSize).推荐1-5;
                .denyCacheImageMultipleSizesInMemory()// 设置加载的图片有多样的
                .tasksProcessingOrder(QueueProcessingType.LIFO)// 图片加载任务顺序
                .memoryCache(new WeakMemoryCache())//使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory();
                .memoryCacheExtraOptions(480, 800) // 即保存的每个缓存文件的最大长宽
                .memoryCacheSizePercentage(60)// 图片内存占应用的60%;
                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())//使用HASHCODE对UIL进行加密命名
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())// 将保存的时候的URI名称用MD5 加密
                .diskCacheSize(50 * 1024 * 1024) // 缓存设置大小为50 Mb
                .diskCache(new UnlimitedDiskCache(new File(Environment.getExternalStorageDirectory() + "myApp/imgCache")))// 自定义缓存路径
                .diskCacheFileCount(100) // 缓存的文件数量
                .denyCacheImageMultipleSizesInMemory()// 自动缩放
                .imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间
                .memoryCacheExtraOptions(480, 800)//设置缓存图片时候的宽高最大值,默认为屏幕宽高;保存的每个缓存文件的最大长宽
                .defaultDisplayImageOptions(getDisplayOptions())// 如果需要打开缓存机制,需要自己builde一个option,可以是DisplayImageOptions.createSimple()
                .writeDebugLogs() // Remove for release app
                .build();
        ImageLoader.getInstance().init(config);
    }
    private DisplayImageOptions getDisplayOptions(){
        DisplayImageOptions options= new DisplayImageOptions.Builder()// 开始构建, 显示的图片的各种格式
                .resetViewBeforeLoading(true)// 设置图片在下载前是否重置,复位
                .cacheInMemory(true)// 开启内存缓存
                .cacheOnDisk(true) // 开启硬盘缓存
                .displayer(new RoundedBitmapDisplayer(20))// 是否设置为圆角,弧度为多少;避免使用RoundedBitmapDisplayer.他会创建新的ARGB_8888格式的Bitmap对象;
                .displayer(new FadeInBitmapDisplayer(100))// 是否图片加载好后渐入的动画时间
                .displayer(new SimpleBitmapDisplayer())// 正常显示一张图片 
                .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型;使用.bitmapConfig(Bitmap.config.RGB_565)代替ARGB_8888;
                .considerExifParams(true)// 是否考虑JPEG图像EXIF参数(旋转,翻转)
                .imageScaleType(ImageScaleType.EXACTLY)// 缩放级别
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//这两种配置缩放都推荐
                .build();// 构建完成(参数可以不用设置全,根据需要来配置)}
        return options;
    }
}


布局activity_main的设置:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.dpl.photoviewdemo.MainActivity">
    <uk.co.senab.photoview.PhotoView
        android:id="@+id/iv_photo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <uk.co.senab.photoview.PhotoView
        android:id="@+id/iv_photo1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>



MainActivity类的代码如下:

package com.example.dpl.photoviewdemo;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

import java.io.IOException;
import java.io.InputStream;

import uk.co.senab.photoview.PhotoView;
import uk.co.senab.photoview.PhotoViewAttacher;

/*
加载网络图片和本地图片
PhotoView进行缩放处理
 */
public class MainActivity extends AppCompatActivity {
    private PhotoView iv_photo,iv_photo1;
    private PhotoViewAttacher attacher;
    private ImageLoader loader;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv_photo= (PhotoView) findViewById(R.id.iv_photo);
        iv_photo1= (PhotoView) findViewById(R.id.iv_photo1);
        attacher=new PhotoViewAttacher(iv_photo);//PhotoViewAttacher测量了图片宽高,进行缩放
        //加载本地图片,缩放处理
        try {
            InputStream is=getAssets().open("xin.png");
            Bitmap bm= BitmapFactory.decodeStream(is);
            //BitmapFactory.decodeStream()从资源files, streams, and byte-arrays中解码生成Bitmap对象。
            iv_photo.setImageBitmap(bm);
        } catch (IOException e) {
            e.printStackTrace();
        }


        //加载网络图片
        loader=ImageLoader.getInstance();
        loader.init(ImageLoaderConfiguration.createDefault(MainActivity.this));//loader初始化
        loader.displayImage("https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=167154" +
                "952,3594779114&fm=200&gp=0.jpg",iv_photo1);//展示图片
        iv_photo1.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {//图片监听
            @Override
            public void onPhotoTap(View view, float x, float y) {

            }
        });
    }
}

运行效果:



Demo代码链接:https://github.com/dpl12/PhotoViewDemo

阅读更多

没有更多推荐了,返回首页