我正在使用Sketch软件构建svg图像以在我的android项目中使用.我遇到了这个问题:
正如您所看到的,图片还可以,我通过Chrome和Macos预览检查了预览.
当我尝试在Android Studio中导入SVG时,导入预览如下:
填充的内部的减去的圆圈消失了.导入日志给我发消息:
In ic_percent.svg:
WARNING@ line 10 We don't scale the stroke width!
WARNING@ line 11 We don't scale the stroke width!
WARNING@ line 12 We don't scale the stroke width!
WARNING@ line 13 We don't scale the stroke width!
Run Code Online (Sandbox Code Playgroud)
有谁知道我的导入发生了什么?
我正在尝试绑定一个指示ImageView的布尔值,如果屏幕尺寸很小,那么如果我需要更多空间用于其他组件,它会缩小.我正在使用DataBinding库这样做.
我的布局,其宽度和高度取决于此布尔值:
...
<data>
...
<variable name="smallScreen" type="boolean"/>
...
</data>
...
<ImageView
android:layout_width="@{smallScreen ? @dimen/img_small_screen_size : @dimen/img_big_screen_size}"
android:layout_height="@{smallScreen ? @dimen/img_small_screen_size : @dimen/img_big_screen_size}"
android:layout_gravity="center_horizontal"
android:contentDescription="@{message}"
android:src="@{image}"
android:scaleType="center"
tools:src="@drawable/img_message_private"/>
...
Run Code Online (Sandbox Code Playgroud)
如果我只是尝试像这样构建我的项目,编译器说layout_width不能接受float类型.很公平,我使用BindingAdapter类为布局属性创建一个浮动输入,如下所示:
...
@BindingAdapter("android:layout_width")
public static void setLayoutWidth(View view, float width) {
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = (int) width;
view.setLayoutParams(layoutParams);
}
@BindingAdapter("android:layout_height")
public static void setLayoutHeight(View view, float height) {
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.height = (int) height;
view.setLayoutParams(layoutParams);
}
...
Run Code Online (Sandbox Code Playgroud)
这允许我的项目建立.但是当最终渲染布局时,我会遇到以下异常:
java.lang.RuntimeException: Binary XML file line #21: You must …Run Code Online (Sandbox Code Playgroud) 我正在实现一个无限流响应,比如使用 gRPC 架构的发布/订阅模式。
有一个端点打开一个响应流并保持它直到客户端掉线。为此,我存储了一个键值哈希,其中键是 gRPC 上下文,值是我用来轮询发送消息的队列。
我的端点代码如下所示:
def StreamTrades(self, request, context):
self.feeds[context] = queue.Queue()
callback_queue = queue.Queue()
def remove_feed():
if self.feeds.get(context) is not None:
del self.feeds[context]
def stop_stream():
remove_feed()
def raise_stop_stream_exception():
raise StopStream('stopping stream')
callback_queue.put(raise_stop_stream_exception)
context.add_callback(stop_stream)
def output_generator():
while True:
try:
try:
callback = callback_queue.get(False)
callback()
except queue.Empty:
pass
if self.feeds.get(context) is not None:
trade = self.feeds[context].get()
if isinstance(trade, trades_pb2.Trade):
yield trade
else:
raise StopStream('stopping stream')
except IndexError:
pass
except StopStream:
return
return output_generator()
Run Code Online (Sandbox Code Playgroud)
此代码适用于订阅和发布对客户端的更改。但是有一个与取消订阅相关的问题。检测客户端丢失的好方法是什么?使用 Context.add_callback(callBack) 似乎不起作用,因为只有在服务器完成并关闭流时才会调用回调。当客户端不再存在时,生成器不会引发任何类型的状态。我看到在 Java 中,当在 streamObserver …
我在android中使用SVG导入的图像,但我无法使用ImageView调整大小,图像是这样的.
进口的drawable是:
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="208dp"
android:height="208dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#8A1D3043"
android:pathData="...lines and curves..."/>
</vector>
Run Code Online (Sandbox Code Playgroud)
当我更改ImageView(它所附加的位置)layout_height和layout_width时,我得到了这个:
<ImageView
android:layout_height="100dp"
android:layout_width="100dp"
app:layout_width="@{smallScreen ? @dimen/img_small_screen_size : @dimen/img_big_screen_size}"
app:layout_height="@{smallScreen ? @dimen/img_small_screen_size : @dimen/img_big_screen_size}"
android:layout_gravity="center_horizontal"
android:contentDescription="@{message}"
android:src="@{image}"
android:scaleType="center"
tools:src="@drawable/img_message_private"/>
Run Code Online (Sandbox Code Playgroud)
请注意,向量的高度和宽度都是208dp,但我的ImageView必须用作100dp.必须使用dataBind动态调整View的大小,因此我认为有多个向量不是一个选项.
显然,图像不能与ImageView一起缩放.有人知道为什么以及如何轻松绕过它?