我有来自 iOS 项目的 PDF 图像资产,我需要将其添加到 Android Studio 项目中。是否可以将 PDF 添加到 Android Studio,或者我是否必须使用 Gimp 或 Illustrator 等外部转换器将资产转换为 SVG/PSD/XML?(谷歌的Android矢量图形文档)如果是这样,这样做的最佳实践是什么?我问是因为,到目前为止,我尝试这样做的结果是低质量的资产。
pdf android vector-graphics android-studio android-vectordrawable
这真让我抓狂.我希望能够以编程方式调整xml矢量可绘制图标的大小,以便在ImageView中使用它.
这是我到目前为止所做的不起作用的
Drawable drawable = ResourcesCompat.getDrawable(getResources(),R.drawable.ic_marker,null);
drawable.setBounds(0,0,512,512);
imageVenue.setImageDrawable(drawable);
Run Code Online (Sandbox Code Playgroud)
矢量图标ic_marker未调整大小.它只是每次都保持硬编码的宽度和高度值.
有任何想法吗?
java android android-layout android-studio android-vectordrawable
我在这里找到了这个矢量可绘制资源.我想要做的是翻转它,使X在另一边.
我设法在布局中执行此操作,就像在此示例中添加:
android:scaleX="-1"
到我的ImageView并且它可以工作.
现在我想直接在Vector Drawable中更改它,但是当我尝试下面的代码时它是不可见的.
account_remove.xml:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">
<group
android:name="rotationGroup"
android:scaleX="-1" >
<path
android:fillColor="#FFFFFF"
android:pathData="M15,14C17.67,14 23,15.33 23,18V20H7V18C7,15.33 12.33,14 15,14M15,12A4,4 0 0,1 11,8A4,4 0 0,1 15,4A4,4 0 0,1 19,8A4,4 0 0,1 15,12M5,9.59L7.12,7.46L8.54,8.88L6.41,11L8.54,13.12L7.12,14.54L5,12.41L2.88,14.54L1.46,13.12L3.59,11L1.46,8.88L2.88,7.46L5,9.59Z" />
</group>
</vector>
Run Code Online (Sandbox Code Playgroud)
当我添加:
android:pivotX="10.0"
android:pivotY="10.0"
Run Code Online (Sandbox Code Playgroud)
到我的rotationGroup,它向右倾斜.
我应该将哪些值添加到我的rotationGroup以使其正常工作?
xml android drawable android-drawable android-vectordrawable
选项卡图标:我当前的方法是创建两个文件(ic_list_selected_24dp.xml和ic_list_unselected_24dp.xml;它们基本相同但只是android:fillColor='Color HEX CODE'不同),然后创建一个选择器(selector_tabitem_list.xml)来更改状态时的可绘制颜色改变了.
// @drawable/selector_tabitem_list.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:drawable="@drawable/ic_list_selected_24dp"
android:state_selected="true" />
<item android:drawable="@drawable/ic_list_unselected_24dp"
android:state_selected="false" />
</selector>
Run Code Online (Sandbox Code Playgroud)
它有点复制,因为两个drawable是相同的.
选择器不能用于矢量drawable.
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@drawable/selector"
android:pathData="M19,3...."
</vector>
Run Code Online (Sandbox Code Playgroud)
-
// @drawable/selector
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<color android:color="@color/itemSelected" />
</item>
<item android:state_selected="false">
<color android:color="@color/itemUnselected" />
</item>
</selector>
Run Code Online (Sandbox Code Playgroud)
,android:fillColor="@color/state"或者.
// @color/state
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/white" android:state_selected="true" />
<item android:color="@android:color/black" android:state_selected="false" />
</selector>
Run Code Online (Sandbox Code Playgroud)
有没有办法使用一个drawable并动态更改其颜色?使用硬十六进制代码更好?
谢谢.
android android-tabs android-selector android-tablayout android-vectordrawable
如何Drawable从 xml 向量中设置ImageSpan?我使用下面这两种方法。但我的图标没有显示。当我使用可绘制资源图标中的 png 时,会显示出来。任何想法?
private void setupEmptyListInfoBox() {
Drawable icon = loadVectorFromResources(getActivity(), R.drawable.ic_add_circle_24dp);
ImageSpan is = new ImageSpan(icon, DynamicDrawableSpan.ALIGN_BASELINE);
String info = getString(R.string.empty_weight_list_info);
int iconPosition = info.indexOf("|");
SpannableString text = new SpannableString(info);
text.setSpan(is, iconPosition, iconPosition + 1, 0);
mEmptyListInfo.setText(text);
}
public static Drawable loadVectorFromResources(Context context, int resId) {
Drawable drawable;
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
drawable = VectorDrawableCompat.create(context.getResources(), resId, context.getTheme());
} else {
drawable = context.getResources().getDrawable(resId, context.getTheme());
}
return drawable;
}
Run Code Online (Sandbox Code Playgroud) 我有工作项目.
我有我的gradle文件:
defaultConfig {
vectorDrawables.useSupportLibrary = true
vectorDrawables.generatedDensities = []
}
Run Code Online (Sandbox Code Playgroud)
我也打电话给活动:
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
Run Code Online (Sandbox Code Playgroud)
应用程序完美.现在改为:
google()行执行gradle clean assembleDebug.
应用程序继续适用于API> 20的设备.但对于API <21(谷歌Android模拟器),启动应用程序崩溃.我在logcat错误中看到:Resources$NotFoundException: Resource ID #0x7f080058(0x7f080058是可绘制的abc_vector_test).
为什么?
UPD 2017-07-19:它已修复并发布在com.android.tools.build:gradle:3.0.0-alpha7
我目前在使用 Android Studio 时遇到了一些问题,因为我最近开始使用“矢量资产”。我已经完成了在我的应用程序中正确显示它们所需的一切(使用app:srcCompat=""xml、android {defaultConfig {vectorDrawables.useSupportLibrary true}}build.gradle 和setContentView()之前AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);的onCreate()方法)。
我导入到 Android Studio 中的 svg 文件本身没有错误,我可以使用向导在 ImageView 中毫无问题地看到结果。唯一的问题出现在我运行我的应用程序时,它到达绘制 svg 的时间。我的一些 svg 仍然有效,而另一些则无效,所以我认为其中一些需要很长时间来处理。这是错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.retroverse.bataille_corse, PID: 18807
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.retroverse.bataille_corse/com.retroverse.bataille_corse.MenuPrincipal}: android.view.InflateException: Binary XML file line #127: Binary XML file line #127: Error inflating class ImageView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2985)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3120)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1840)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6872)
at java.lang.reflect.Method.invoke(Native Method) …Run Code Online (Sandbox Code Playgroud) svg android runtimeexception android-studio android-vectordrawable
我编写了一些片段场景测试,这些测试将截取屏幕截图和一些点击事件。由于未显示图像视图,很少有测试失败。
测试库( https://developer.android.com/training/basics/fragments/testing )中的测试活动似乎使用 FragmentActivity,它不是 AppCompatActivity 的子类。结果,这些图像视图不可见。我可以添加属性android:src以使其在测试中可见,但这将是一个丑陋的修复。还有其他解决办法吗?
感谢对此的任何评论或建议。
view_item.xml
<ImageView
android:id="@+id/ivRemove"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_marginStart="@dimen/spacing_16dp"
android:layout_marginTop="@dimen/spacing_16dp"
android:layout_marginBottom="@dimen/spacing_16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_remove" />
Run Code Online (Sandbox Code Playgroud)
构建.gradle.kts
defaultConfig {
this.testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
this.vectorDrawables.useSupportLibrary = true
}
Run Code Online (Sandbox Code Playgroud) android android-testing android-vectordrawable android-fragmentscenario
我有以下可绘制的layer-list:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="@color/grey" />
<size
android:width="64dp"
android:height="64dp" />
</shape>
</item>
<item
android:layout_gravity="center_vertical"
android:width="36dp"
android:height="36dp"
android:drawable="@drawable/ic_android_black_24dp"
android:gravity="center"
android:tint="@color/red" />
</layer-list>
Run Code Online (Sandbox Code Playgroud)
其中ic_android_black_24dp是可绘制矢量。
我需要在 xml 中更改此可绘制对象的颜色(不是以编程方式),并且无需创建具有不同颜色的副本。
我尝试过android:tint,android:color并用不同的方法<shape>。
有什么解决方案可以做到这一点吗?
我有一些从 SVG 转换而来的矢量图标,我需要根据某些条件为它们自定义色调颜色,我正在尝试以编程方式更改色调颜色
Image(
modifier = Modifier.size(128.dp),
painter = painterResource(id = R.drawable.icon_1),
contentDescription = null,
colorFilter = ColorFilter.tint(Color.Red)
)
Run Code Online (Sandbox Code Playgroud)
它给了我以下结果
另外,当我尝试使用
Image(
modifier = Modifier.size(128.dp),
painter = painterResource(id = R.drawable.icon_1),
contentDescription = null,
colorFilter = ColorFilter.tint(Color.Red, blendMode = BlendMode.Multiply)
)
Run Code Online (Sandbox Code Playgroud)
我也得到了同样的结果。但是,当我尝试通过添加来更改 XML 文件中的图标色调时
android:tint="@color/red"
android:tintMode="multiply"
Run Code Online (Sandbox Code Playgroud)
它正确地给了我想要的结果,如下所示
那么,当我需要根据某些条件以编程方式将颜色更改为不同颜色时,如何才能以编程方式实现相同的结果呢?