我在一个android应用程序上工作,我有一个可绘制的,我正在从源图像加载。在这个图像上,我想将所有的白色像素转换为不同的颜色,比如蓝色,然后缓存生成的Drawable对象,以便以后使用它。

例如,我有一个20x20的PNG文件,中间有一个白色的圆圈,圆圈之外的一切都是透明的。把白色圆圈变成蓝色并缓存结果的最好方法是什么?如果我想使用源图像来创建几个新的Drawables(比如蓝色、红色、绿色、橙色等),答案会改变吗?

我猜我想在某种程度上使用一个ColorMatrix,但我不确定如何。

我这里有一个xml的textView。

<TextView
        android:id="@+id/bookTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:drawableLeft="@drawable/checkmark"
        android:gravity="center_vertical"
        android:textStyle="bold"
        android:textSize="24dip"
        android:maxLines="1"
        android:ellipsize="end"/>

正如你所看到的,我在xml中设置了drawablleft。

我想在代码中改变可绘制的。

有办法做这件事吗?或者在文本视图的代码中设置drawablleft ?

在我调用setCompoundDrawables方法后,复合Drawable没有显示。

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn.setCompoundDrawables(myDrawable, null, null, null);

任何想法吗?

我需要添加一个图像到res/drawable文件夹…

当我选择新的>图像资产,它出现了一个对话框,选择资产类型…

如何将图像添加到res/drawable文件夹?

是否可以为我们添加的android: drawablleft图像设置边缘或填充?

自从Android 4.3 (Jelly Bean)以来,我们现在可以使用res/mipmap文件夹来存储“mipmap”图像。

例如,Chrome For Android将图标存储在这些文件夹中,而不是更普通的res/drawable文件夹。

这些mipmap图像与其他熟悉的可绘制图像有何不同?

我看到,在我的清单,我们使用@mipmap/限定符,而不是@drawable/,这是有意义的给定资源文件夹名称:

<activity
    android:name=".MipmapDemp"
    android:icon="@mipmap/ic_launcher" />

引用:

Android 4.3 api文档有以下内容:

Using a mipmap as the source for your bitmap or drawable is a simple way to provide a quality image and various image scales, which can be particularly useful if you expect your image to be scaled during an animation. Android 4.2 (API level 17) added support for mipmaps in the Bitmap class—Android swaps the mip images in your Bitmap when you've supplied a mipmap source and have enabled setHasMipMap(). Now in Android 4.3, you can enable mipmaps for a BitmapDrawable object as well, by providing a mipmap asset and setting the android:mipMap attribute in a bitmap resource file or by calling hasMipMap().

我没有看到任何能帮助我理解的东西。


XML位图资源有一个android:mipMap属性:

布尔。启用或禁用mipmap提示。参见setHasMipMap() 更多的信息。默认值为false。

据我所知,这并不适用于启动器图标。


这个问题是在谷歌Groups(资源名“mipmap”的目的?!)上提出的,Romain Guy回答说:

提供一个更大分辨率的图像是有用的 通常被计算(例如,在mdpi设备上,Launcher可能被计算) 想要更大的hdpi图标来显示大的应用程序快捷方式。)

我觉得这几乎说得通,但不完全是。

我仍然倾向于Randy Sugianto的后续观点:

这样做的好处是什么?有使用指南吗 Mipmaps,可能是为了更好的启动器图标?


当然,维基百科上有一个“Mipmap”的页面,这是一种1983年发明的老技术,我无法将其与当前的Android实现联系起来。


现在我们是否应该将所有应用图标存储在res/mipmap文件夹中,这些mipmap图像的指导原则是什么?


Update # 1

这里有一篇博客文章试图解释一下。

Android 4.3中用于绘图的Mipmapping

但在那篇博客文章中使用的图像显示了一个包含许多标志的文件。这不是我在Chrome的mipmap文件夹中看到的。

Chrome的mimmap -hdpi文件夹包含三张图片。一个是Chrome的logo。

奇怪的是,它是72x72,而不是我期望看到的48x48。

也许这就是全部——我们只需要在mipmap文件夹中保留更大的图标?


更新# 2

2014年10月23日的Android开发者博客文章再次确认了使用mipmap文件夹作为应用程序图标的想法:

为Nexus 6和Nexus 9准备好应用程序

在谈到Nexus 6的屏幕密度时,作者写道:

最好的做法是把你的应用程序图标放在mipmap-文件夹(而不是 可绘制-文件夹),因为它们用于不同的分辨率 器件的电流密度。例如,xxxhdpi应用程序图标可以是 用于xxhdpi设备的启动器上。


更新# 3

注意,Android Studio在mipmap中创建了ic_launcher.png图标…文件夹而不是可绘制的…Eclipse用来在其中创建它们的文件夹。


我正在使用Android Studio 1.1 Preview 1。我注意到,当我创建一个新项目时,我得到以下层次结构:

Mipmap文件夹用于不同的DPIs,没有更多不同的DPIs可绘制文件夹。

我应该把所有资源都放在mipmap文件夹中,还是只放在应用程序图标中?

我在查找Android版XML中形状定义的文档时遇到了一些问题。我想在XML文件中定义一个用纯色填充的简单圆圈,以将其包含在布局文件中。

遗憾的是,android.com上的文档没有涵盖Shape类的XML属性。我想我应该用ArcShape来画一个圆,但没有关于如何设置大小、颜色或角度的说明。

对于新的android API 22,getResources().getDrawable()现在已被弃用。现在最好的方法是只使用getDrawable()。

什么改变了?