在我的应用程序中,我必须为通知设置一个大图标。LargeIcon必须是位图,我的可绘制内容是矢量图像(Android中的新功能,请参见此链接)。问题是,当我尝试解码矢量图像资源时,返回空值。
以下是代码示例:
if (BitmapFactory.decodeResource(arg0.getResources(), R.drawable.vector_menu_objectifs) == null)
Log.d("ISNULL", "NULL");
else
Log.d("ISNULL", "NOT NULL");
在本示例中,当我替换R.drawable时。vector_menu_objectifs带有“普通”图像,例如png,结果不为空(我得到了正确的位图)是否缺少什么?
您可以使用以下方法:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private static Bitmap getBitmap(VectorDrawable vectorDrawable) {
Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(),
vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
vectorDrawable.draw(canvas);
return bitmap;
}
我有时会把它和:
private static Bitmap getBitmap(Context context, int drawableId) {
Drawable drawable = ContextCompat.getDrawable(context, drawableId);
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable) drawable).getBitmap();
} else if (drawable instanceof VectorDrawable) {
return getBitmap((VectorDrawable) drawable);
} else {
throw new IllegalArgumentException("unsupported drawable type");
}
}
如果您愿意将Android KTX用于静态编程语言,您可以使用扩展方法Drawable#toBitmap()
来实现与其他答案相同的效果:
val bitmap = AppCompatResources.getDrawable(requireContext(), drawableId).toBitmap()
或
val bitmap = AppCompatResources.getDrawable(context, drawableId).toBitmap()
要添加这个和其他有用的扩展方法,您需要将以下内容添加到您的模块级别build.gradle
repositories {
google()
}
dependencies {
implementation "androidx.core:core-ktx:1.2.0"
}
有关向项目添加依赖项的最新说明,请参阅此处。
请注意,这将适用于Drawable
的任何子类,如果Drawable
是bitmappdrawable
的话,它将提供使用底层位图的快捷方式。
检查API:17、21、23
public static Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) {
Drawable drawable = ContextCompat.getDrawable(context, drawableId);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
drawable = (DrawableCompat.wrap(drawable)).mutate();
}
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
更新:
格拉德尔项目:
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0-alpha5'
}
模块梯度:
android {
compileSdkVersion 23
buildToolsVersion '23.0.3'
defaultConfig {
minSdkVersion 16
targetSdkVersion 23
vectorDrawables.useSupportLibrary = true
}
...
}
...
问题内容: 我正在学习线性代数课程,我想可视化正在使用的向量,例如向量加法,法向向量等。 例如: 在这种情况下,我想绘制3个向量。 然后,我应该能够添加V1,V2来绘制一个新的向量V12(全部合并在一个图中)。 当我使用以下代码时,情节与预期不符 问题答案: 多亏了每个人,您的每个帖子对我都有很大帮助。 对于我的问题,rbierman代码非常简单,我做了一些修改,并创建了一个函数来绘制给定数组中的
我想用ApachePDFBox在PDF上绘制一个矢量图像。 这是我用来绘制普通图像的代码 如果我使用或图像而不是png,则生成的PDF文档会损坏。 我希望图像是矢量图像的主要原因是,使用PNG或JPG时,图像看起来很糟糕,我认为它会被压缩,所以看起来很糟糕。对于矢量图像,这不应该发生(当我在Inkscape中将svg路径导出为PDF时,它不会发生,矢量路径会被保留)。 有没有办法使用Apache
我使用的是23.4版的设计支持库。0.我已启用渐变标志: 我正在使用构建工具23.0版。2,但我仍然在KitKat或更低版本上获得。 当我使用或。 是的,我在每一个我使用抽绳的活动中都会用到这个 这是支持库的错误吗?
我面临以下问题:我必须给成千上万的图形用户界面元素命名。如果它能像这样工作,那就太好了: 如果我能将元素的名称设置为“Classname.myMenuItem”,那就太好了。 是否有任何方法来获取变量的名称(变量名称ofc,而不是JMenuItem.getName())?
问题内容: 我有以下数据: 我使用以下代码将其绘制在seaborn中: 如何获得每个组的X跨度?例如,父组的swarmplot的水平跨度的范围是多少? 问题答案: 您可以从中创建的信息。 实际返回matplotlib实例,然后从那里可以找到它创建的实例。要获取职位,我们可以使用。 这是您的示例,进行了修改以查找并打印群限制,然后使用它们在群周围绘制方框。 打印: 这是图:
问题内容: 我正在开发一个Android项目,并且选择显示图标是因为它具有适应性和动态性,但是我只能在运行Android且具有API 21或更高版本的设备上运行此应用程序。我的问题是如何在较低的Android版本(即API 14或更高版本)上使用。谢谢! 问题答案: 使用支持库23.2,一直到API v7都对Vector Drawables提供了真正的支持。建议通过添加以下内容来禁用该支持的先前版