当前位置: 首页 > 知识库问答 >
问题:

SimpleDraweeView在壁画中缩放图像后不调整大小

贾骏喆
2023-03-14

我正在使用壁画在列表视图中显示图像。不过,我有个问题。

当我使用CENTER_CROP等保持纵横比的方法缩放图像时,缩放的图像高度变得小于SimpleDraWeeView的高度,SimpleDraWeeView不会自动调整大小以匹配缩放图像的大小。

>

  • 我尝试使用android:adjustViewBounds=true,但它不起作用。
  • 我也尝试了下面的方法,但是scaleY(我想用来计算缩放高度)返回1,即使图像高度小于Simpe-Dravee-View的高度

    float[] f = new float[9]
    draweeView.getImageMatrix().getValues(f);
    float scaleY = f[Matrix.MSCALE_Y];
    Log.d("App","scale y is "+ scaleY);
    

    在下面的方法中使用上述codlet

    private void loadImage(Uri fileUri,final SimpleDraweeView draweeView,int myImageHeight){
    
        draweeView.getLayoutParams().width = displayWidth;
    
        int selectedSize = (myImageHeight > displayWidth)? displayWidth : myImageHeight;
    
        draweeView.getLayoutParams().height= selectedSize;
    
    
        GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(context.getResources());
    
        GenericDraweeHierarchy hierarchy = builder
                .setProgressBarImage(new CircleProgressBarDrawable())
                .setActualImageScaleType(ScalingUtils.ScaleType.CENTER_CROP)
                .build();
    
    
        ImageRequest requestBuilder = ImageRequestBuilder.newBuilderWithSource(fileUri)
                .setProgressiveRenderingEnabled(true)
                .build();
    
        //ImagePipeline imagePipeline = Fresco.getImagePipeline();
    
        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setOldController(draweeView.getController())
                .setImageRequest(requestBuilder)
                .build();
        draweeView.setHierarchy(hierarchy);
        draweeView.setController(controller);
    
         float[] f = new float[9]
         draweeView.getImageMatrix().getValues(f);
         float scaleY = f[Matrix.MSCALE_Y];
         Log.d("App","scale y is "+ scaleY);
    }
    

    结果:红色代表简单付款人视图中未填充图像的部分。这是刻度类型FIT_Center。当我使用CENTER_CROP时,图像填充了整个imageview并且图像的某些部分被砍掉了,而我不希望这样

    问:我如何获得缩放的图像大小,并使用它来调整我的simpleDraweeView的大小,或者换句话说,我如何使我的simpleDraweeView调整它的大小?

    我将感谢任何帮助。

  • 共有1个答案

    谈萧迟
    2023-03-14

    为了使simpledraweeview调整大小,这就是我实现了ControllerListener并根据需要更改了simpledraweeview高度的内容。

    private void loadImage(Uri fileUri,final SimpleDraweeView simpeDraweeView) {
    
        GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(context.getResources());
    
        GenericDraweeHierarchy hierarchy = builder
                .setProgressBarImage(new CircleProgressBarDrawable())
                .setActualImageScaleType(ScalingUtils.ScaleType.CENTER_CROP)
                .build();
    
    
        ImageRequest requestBuilder = ImageRequestBuilder.newBuilderWithSource(fileUri)
                .setProgressiveRenderingEnabled(true)
                .build();
    
    
        ControllerListener<ImageInfo> contollerListener = new BaseContollerListener<ImageInfo>() {
    
        public void onFinalImageSet(String id, ImageInfo imageinfo,Animatable animatable) {
    
            if(imageinfo != null) {
               updateViewSize(imageinfo)
             }
        }
    
        DraweeContoller contoller = Fresco.newDraweeContollerBuilder()
                     .setContollerListener(contollerListener)
                     .setImageRequest(requestBuilder)
                     .build();
    
        simpleDraweeView.setHierarchy(hierarchy);
        simpleDraweeView.setController(contoller);
    
    }
    
    private void updateViewSize(ImageInfo imageinfo){
     //this is my own implementation of changing simple-drawee-view height
     // you canhave yours using imageinfo.getHeight() or imageinfo.getWidth();
     simpleDraweeView.getLayoutParams().height = imageinfo.getHeight();
    
       // don't forget to call this method. thanks to @plamenko for reminding me.
    
       simpleDraweeView.requestLayout()
    }
    
     类似资料:
    • 问题内容: 我想拍摄一张图像并更改图像的比例,虽然它是一个numpy数组。 例如,我有一个可口可乐瓶的图像: bottle-1 转换为一个numpy的形状数组,我想调整其大小以表示第二个图像的大小: bottle-2 形状为。 如何在保持原始图像的同时将图像尺寸更改为特定形状?其他答案建议每隔一行或第三行剥离,但是我想要做的基本上是像通过图像编辑器(但在python代码中)那样收缩图像。是否有任何

    • 我在应用程序中使用frescolib从url加载图像。但是,我在recyclerview的对象中遇到了一个问题。具体来说,我需要在SimpleDraweView中居中显示图像,同时保持格式。所以我使用了下面的代码,但是我得到了应该是白色的部分中有条纹的拉伸图像。 这是错误加载的图像 这是原始图像 我的代码: 知道图像加载不好的原因吗?

    • 我正在开发一个画廊屏幕,允许用户从设备中选择一些图像并发送给另一个用户。我正在使用加载图像,但是根据设备的不同,图像加载非常慢,屏幕上的滚动也很慢。 谁知道怎么解决这个问题? 谢谢!

    • 我使用html5画布元素在浏览器中调整图像大小。原来质量很低。我发现:当缩放 时禁用插值,但这无助于提高质量。 下面是我的css和js代码,以及用Photoshop缩放和在画布API中缩放的图像。 当在浏览器中缩放图像时,我必须做什么来获得最佳质量? JS: 使用Photoshop调整图像大小: 在画布上调整了图像大小: 下面是我使用2步缩小尺寸的结果: 下面是我使用三步缩小尺寸的结果: 下面是如

    • 我对图像进行了收缩缩放,但是当我第一次加载应用程序时,整个图像不可见,只有一部分。图像填充了屏幕的宽度,但其上下都有空白。此外,当缩放图像时,图像变得非常短。纵横比应保持不变。 我希望在应用程序加载时使整个图像可见,然后我希望能够用两根手指缩小图像,其中图像不会小于屏幕的大小,以便屏幕始终充满(图像是地图)。 为了放大,图像应该超出手机屏幕的宽度和高度。这样我就可以平移过去查看地图的细节。 任何帮

    • 问题内容: 我正在尝试使用javascript和canvas元素在客户端创建缩略图,但是当我缩小图像时,它看起来很糟糕。看起来好像是在Photoshop中缩小了尺寸,将重采样设置为“最近的邻居”而不是Bicubic。我知道有可能使它看起来正确,因为该站点也可以使用画布来完成它。我已经尝试使用与[[Source]]链接中所示相同的代码,但是看起来仍然很糟糕。是否缺少我需要的设置,需要设置的设置? 编