【发布时间】:2017-01-12 15:25:09
【问题描述】:
我有一个回收视图来显示所有照片缩略图项目。当单击项目时,我使用此项目中的图像视图转换为详细信息活动。问题是图像源是由UIL 从互联网获取的。并且有时(并非总是)图像不会重新加载正确的尺寸,如下所示:
// on view holder item click
final Pair<View, String>[] pairs = TransitionHelper.createSafeTransitionParticipants(this, false,
new Pair<>(((ItemViewHolder) viewHolder).thumbnail, getString(R.string.TransitionName_Profile_Image)),
new Pair<>(((ItemViewHolder) viewHolder).tvName, getString(R.string.TransitionName_Profile_Name)));
ActivityOptionsCompat transitionActivityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pairs);
startActivityForResult(intent, requestCode, transitionActivityOptions.toBundle());
详细活动
// try to post pone transition until UIL load finish
ActivityCompat.postponeEnterTransition(this);
getSupportFragmentManager().beginTransaction().replace(R.id.layoutContent, new DetailFragment()).commit();
片段详情
ImageLoader.getInstance().displayImage(url, imageViewDetail, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
finishAnimation();
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
finishAnimation();
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
finishAnimation();
}
});
private void finishAnimation(){
ActivityCompat.startPostponedEnterTransition(getActivity());
imageViewDetail.invalidate();
}
fragment_detail.xml
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:transitionName="@string/TransitionName.Profile.Image"
android:id="@+id/imageViewDetail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="centerCrop"/>
</FrameLayout>
我什至在加载图像之前等待视图布局但仍然不起作用:
imageViewDetail.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
// code load image from UIL
return false;
}
});
有什么办法可以避免这个问题?
【问题讨论】:
-
您正在使用 centerCrop 可能是尝试使用不同比例类型的问题。
-
@Himani 好吧,我必须使用,因为照片必须适合屏幕并保持比例。但是您对 scaletype 错误有任何线索吗?它确实适用于许多情况,但有时看起来图像还没有准备好
-
然后使用 FITXY 来缩放类型
-
@Himani 首先,fitXY 不保持比例方面。第二,还是不行。
-
@R4j,你提前知道源图片的纵横比吗?我对图像有类似的问题。但就我而言,我事先知道图像的纵横比,即 2:3 。所以我有一个图像视图,在其中我根据设备屏幕大小在运行时动态更改图像视图尺寸。如果这是您的要求,我可以发布这样做的代码。
标签: android android-animation universal-image-loader android-transitions