需求: 一个activity只加载显示一张长图,宽度固定为屏幕的宽,高度自适应滑动,并且可以手势放大缩小
不知道你们会怎么实现呢,今天我来记录一下自己的实现
SubsamplingScaleImageView 一个开源控件,使用方法:
布局中:只有这一个控件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_article_detail_hufu" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.jixiong.teen.activity.ArticleDetailHufuActivity"> <com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView android:id="@+id/ivHufuDetail" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
java代码中:
首先,找到这个控件
@Bind(R.id.ivHufuDetail) SubsamplingScaleImageView ivHufuDetail;
然后设置初始值
ivHufuDetail.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP); ivHufuDetail.setMinScale(1.0F);//最小显示比例 ivHufuDetail.setMaxScale(10.0F);//最大显示比例(太大了图片显示会失真,因为一般微博长图的宽度不会太宽)
然后,加载服务器传来的图片,这里用的glide
if (!imageUrl.isEmpty()) { Glide.with(this) .load(imageUrl).downloadOnly(new SimpleTarget<File>() { @Override public void onResourceReady(File resource, GlideAnimation<? super File> glideAnimation) { // 将保存的图片地址给SubsamplingScaleImageView,这里注意设置ImageViewState设置初始显示比例 ivHufuDetail.setImage(ImageSource.uri(Uri.fromFile(resource)), new ImageViewState(1.0F, new PointF(0, 0), 0)); } }); }