Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么ImageButton的质量模糊或降低到最差?_Java_Android_Imagebutton - Fatal编程技术网

Java 为什么ImageButton的质量模糊或降低到最差?

Java 为什么ImageButton的质量模糊或降低到最差?,java,android,imagebutton,Java,Android,Imagebutton,我的应用程序有一个ImageButton,它的质量太差了。实际的图像尺寸为4176*4176(4176像素),单独打开时看起来非常好。但当我将其导入android studio并将其分配给ImageButton时,图像质量会下降。我已经尝试了很多方法来解决这个问题,但还没有成功。我对Android编程一无所知。我进入res/drawable,然后右键单击创建新的图像资源,然后指定导入png文件的位置 实际图像: 工作室内图片: 以下是activity_main.xml中的代码: <Line

我的应用程序有一个ImageButton,它的质量太差了。实际的图像尺寸为4176*4176(4176像素),单独打开时看起来非常好。但当我将其导入android studio并将其分配给ImageButton时,图像质量会下降。我已经尝试了很多方法来解决这个问题,但还没有成功。我对Android编程一无所知。我进入res/drawable,然后右键单击创建新的图像资源,然后指定导入png文件的位置

实际图像: 工作室内图片:

以下是activity_main.xml中的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:gravity="center"
android:orientation="vertical">

<ImageButton
    android:id="@+id/police"
    android:layout_width="317dp"
    android:layout_height="295dp"
    android:layout_centerInParent="true"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"

    android:background="@drawable/custom_button"
    />
</LinearLayout>

调用图像的自定义按钮代码:

<item
    android:state_pressed="true"
    android:drawable="@mipmap/pressed" />

<item
    android:drawable="@mipmap/defaultt" />
</selector>

我首先回顾一下Android上与密度无关的像素。这是一个涵盖以下概念的好博客:

主要问题是您的图像(分辨率非常高)正在被压缩以适合图像按钮的内部。通常,您希望通过不同的可绘制资源目录(例如,可绘制hdpi、可绘制xhdpi、可绘制xxhdpi)包含不同密度的图像资产


但是,现在,您可以使用vector drawables,这将减少为每个密度桶拥有多个资产的需要,前提是您能够生成SVG资产文件:

您实际引用的是
/mipmap
目录中类似图像的启动器图标

我建议减小仅用于
ImageButton
的图像大小,并将其放置在
/drawable
目录中,其质量应符合您的要求,或者可能小于当前图像的质量,而不是将其放置在
/mipmap
目录中


此外,我实际上不明白
scaleType
ImageButton
中如何发挥作用的原因。您可能也要删除该行。

要么不要使用刻度线,要么使宽度和高度相等。此外,您不可能需要4x4k的图像。缩小比例。即使宽度和高度相同,仍然保持不变4176px*4176px对于按钮来说分辨率太高了。对于密度为xxxhdpi的平板电脑背景来说,它甚至太高了。因为图像总是很模糊,我创建了这个高分辨率图像,希望它会非常清晰:p192px乘以192px对于可绘制xxxhdpi中的按钮来说已经足够了。你应该认真阅读Android设计指南。检查你应该如何为每个不同的密度相关的可绘制文件夹调整图像的大小。谢谢@TheWander,因为我是从mipmap拍摄图像的,这导致了这个问题。事实上,我甚至试着直接从drawable中提取一些其他图像,结果是一样的。但是现在,当我选择了一些其他的图像并导入到drawable中,并从那里调用它时,这次的质量很好。是的,我确实使用了那些可提取的资源。但我似乎没有正确地导入它们。您可以看到,我从custom_button.xml文件中调用它们来获取图像,我从@mipmap/defaultt调用它们。“defaultt”文件夹有5个不同的hdpi版本,当我从该文件夹查看xxxhdpi版本时,这是最好的版本。但是,在导入时,studio会选择最少的hdpi版本,而不是最好的xxxhdpi版本。如何在导入时准确指定特定版本?系统将选择对应于每个设备像素密度的可绘制文件。具体来说,具有更高像素密度的设备将使用更高分辨率的绘图设备。如果你好奇的话,你可以记录下你的设备密度,看看哪个drawable正在被使用。你如何创造你的资产?如果您使用矢量设计工具(例如Adobe Illustrator)创建它们,则可以通过相应的缩放来轻松导出每个密度桶的质量资产:直接从drawable中获取图像修复了此问题。这个问题甚至在drawable文件夹中也存在,但在我将图像更改为其他高质量图像,然后从drawable中取出后,它得到了修复。谢谢你的帮助