【问题标题】:Android: Image from assets folder is smaller than it should beAndroid:资产文件夹中的图像小于应有的大小
【发布时间】:2017-02-06 18:33:07
【问题描述】:

当我尝试将图像设置为从资产文件夹浏览的ImageView 时遇到问题。当我将相同的图像放在可绘制文件夹中并使用imageView.setImageResource(R.id.image); 时,它比以前的方法浏览的图像更大并且更适合屏幕。有没有办法调整图像的大小,使其像往常一样完全适合屏幕。

这是布局文件和java中的代码。

        AssetManager manager = getActivity().getAssets();       
        InputStream input = null;
        try {
            input = manager.open("images/" + mQuestion.getQImage() + ".png");
        } catch (IOException e) {
            e.printStackTrace();
        }
        Bitmap image = BitmapFactory.decodeStream(input);
        ImageView qImageView = (ImageView) questionView.findViewById(R.id.ImageView_qImage);
        qImageView.setImageBitmap(image);



  <ImageView
    android:id="@+id/ImageView_qImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginTop="@dimen/questionTopBottomMargin"
    android:background="@color/radioButtonStrokeColor"
    android:contentDescription="@string/hello_world"
    android:padding="1px"
    android:scaleType="fitXY" />

【问题讨论】:

标签: android image assets


【解决方案1】:

当您将图像放在drawable文件夹中时,图像会根据屏幕密度进行分类,而如果您将图像放在assest文件夹中,则android需要计算密度。

如果您想使用 assest 文件夹中的图像,那么此代码将为您提供帮助。

Options opts = new BitmapFactory.Options();
opts.inDensity = DisplayMetrics.DENSITY_HIGH;
drawable = Drawable.createFromResourceStream(context.getResources(), null, is, srcName, opts);

看这里

Image loaded from assets folder comes in different size than res/drawable

Android: Accessing images from assets/drawable folders

【讨论】:

    【解决方案2】:

    如果您将图像放在 drawables 文件夹中,它们将被某些功能缩放,它们会从资源中加载它们。您自己加载的资产文件夹中的图像不会发生这种情况。

    【讨论】:

      【解决方案3】:

      Have a look at android docs


      1. 您应该始终使用drawable 文件夹中的图片
      2. android中有不同的drawable文件夹 (drawable-hdpi,drawable-mdpi,drawable-ldpi)
      3. Android 将根据具体情况决定绘制哪个文件夹图像 电话requirementsresolution
      4. 使用9-patch 图像进行自动缩放
      5. 当您从资产加载时,“源”密度是未知的,所以这个 不执行自动缩放。因此,存在差异。

      【讨论】:

      • 为什么一定要使用drawable文件夹?它会影响我的应用程序的性能吗?目前我有近 1000 张图片。将这些上传到可绘制文件夹中会给我造成混乱。
      • @Abrahamyan Samvel .....如果你有像1000这样的大量图像......看看在SD-CARD中缓存图像......这将减少大小你的apk 文件!
      • 但是我可以保护它们不被用户删除或编辑
      • @ Abrahamyan Samvel .....我没有完整的信息......我认为用户无法手动访问这些数据! ...使用MODE-PRIVATE,您可以使只有您的app 可以访问那些data ..... 或者使用MODE-APPEND 其他应用程序可以访问data! .....我能说的是huge number的图像是否更好download它们在你的splash screen中并使用它们,因为它很多feasible
      【解决方案4】:

      您只需在 xml 布局中定义 imageView 的宽度和高度,然后您应该尝试这段代码,它对我非常有效

      public Bitmap getImageBitmap(String imgName){
          AssetManager mgr = getAssets();
          InputStream inputStream = null;
      
          try {
              inputStream = mgr.open(imgName + ".png");
              return BitmapFactory.decodeStream(inputStream);
          } catch (IOException e) {
              e.printStackTrace();
              return null;
          }
      }
      
      ImageView imageView = (ImageView) findViewById(R.id.imageView1);
      Bitmap bitmap = getImageBitmap(imageName);
      imageView.setImageBitmap(bitmap);
      

      【讨论】:

        猜你喜欢
        • 2012-07-19
        • 2016-12-14
        • 2020-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多