我正在编写一个应用程序,涉及使用一个手指在屏幕上书写,或最终使用手写笔.我有那个部分在工作.在ACTION_DOWN上,开始绘图; 在ACTION_MOVE上,添加线段; 在ACTION_UP上,完成一行.
问题是在ACTION_DOWN之后,显然指针需要从它开始的位置移动超过10个像素(基本上是起始点周围的20x20框)才能开始发送ACTION_MOVE事件.离开盒子后,移动事件都非常准确.(我通过测试得出10像素的东西.)因为这是用于书写或绘图,10像素是一个相当大的损失:取决于你试图写的小,你可能会失去第一个字母或两个.我还没有找到任何关于它的信息 - 只有一两个论坛上的帖子,比如http://android.modaco.com/topic/339694-touch-input-problem-not-detecting-very-small -movements/page_ pid _1701028#entry1701028.它似乎出现在某些设备或系统上,而不是其他设备或系统上.但是,当你拥有它时,没有关于如何摆脱它的想法.
我正在使用带有Android 3.1的Galaxy Tab 10.1.我已经尝试了几种不同的东西试图摆脱它:我已经尝试将事件的坐标设置为其他东西,看看我是否可以欺骗它以为光标位于不同的位置; 我尝试用更改的坐标重新调度事件(我的处理程序对新点做出反应,但仍然没有响应10像素半径的移动.)我在源代码中搜索了对该效果的任何引用,并且没有找到(虽然我认为它来自不同版本的Android - 3.1的代码尚未发布,是吗?)我已经搜索了查询指针当前状态的方法,所以我可以只有一个计时器捕获更改,直到指针超过阈值.没有相应的移动事件,找不到任何获得指针坐标的方法.没有任何效果.有没有人知道这件事,或有任何想法或解决方法?谢谢.
- 更新:拖放事件显示相同的阈值.
好的,所以 SwiftUI 和 ObservableObject,在 iOS 13 上。我有实现 ObservableObject 的模型:
class Model: ObservableObject {
@Published public var toggle: Bool = false
init() {
NSLog("Model init")
objectWillChange.sink { void in
NSLog("1 toggle \(self.toggle)")
}
$toggle.sink { v in
NSLog("2 toggle \(self.toggle) -> \(v)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
和一个可以切换的按钮toggle:
struct ContentView: View {
@ObservedObject var model: Model
var body: some View {
Button(action: {
self.model.toggle.toggle()
}, label: {Text(model.toggle ? "on" : "off")})
}
}
Run Code Online (Sandbox Code Playgroud)
现在,这有效。你按下按钮,它会在“开”和“关”之间切换。(在 make 之前toggle @Published,它没有。)但是,日志记录没有按预期工作。我在启动时立即得到两个日志:“Model init”和“2 toggle …
所以,我总是对C++指针有点模糊,而不管其他人被调用了什么.喜欢,
Object* pointer = new Object();
Run Code Online (Sandbox Code Playgroud)
与
Object notpointer();
Run Code Online (Sandbox Code Playgroud)
我知道指针可能涉及第二个,但基本上它是一个非指针.(它究竟叫什么?)
此外,我相信,对于第一个,你必须打电话
delete pointer;
Run Code Online (Sandbox Code Playgroud)
一旦你完成它,在某些时候,对吧?而另一个你不需要担心.我已经读过,第一个是在堆上分配的,但是第二个是在堆栈上分配的,并在方法返回时消失.
但是,当你从函数返回一些东西(不是原始的)时呢?
写一个很好的例子我应该返回std :: strings吗?:
std::string linux_settings_provider::get_home_folder() {
return std::string(getenv("HOME"));
}
Run Code Online (Sandbox Code Playgroud)
通过我之前写的,字符串在堆栈上分配,并且应该在函数返回时释放,对吧?然而没有人对此有任何说法,所以我认为它运作正常.为什么?
一般来说,有什么区别
return new std::string("pointer");
Run Code Online (Sandbox Code Playgroud)
和
return std::string("not-pointer");
Run Code Online (Sandbox Code Playgroud)
?
另外,假设两者兼顾,两者的利弊是什么?
因此,在许多不同的项目中已经发生过多次这种情况.当Xcode出现错误时,我将在Xcode中调试我的应用程序.看了之后,我点击了Step Over或Continue ......它什么也没做.更确切地说,它的行为就像它踩到了,但实际上并没有去任何地方.据我所知,这可以无限期重复.这有问题的一个原因是它永远不会给我崩溃日志,因为它永远不会崩溃.我只在应用程序崩溃并且没有被调试时获得崩溃日志(这意味着我必须通过Crittercism或检查设备日志).
以前有人看过这个,并且/或者知道它为什么会这样做?我在其他地方没有看到任何提及,但在几个项目中我发生了这件事.
例如,在一个项目中,我们使用SocketRocket,并且每隔一段时间(由于尚未知的原因)它在SRWebSocket.m中以下列方法崩溃:
- (void)main;
{
@autoreleasepool {
_runLoop = [NSRunLoop currentRunLoop];
dispatch_group_leave(_waitGroup);
NSTimer *timer = [[NSTimer alloc] initWithFireDate:[NSDate distantFuture] interval:0.0 target:nil selector:nil userInfo:nil repeats:NO];
[_runLoop addTimer:timer forMode:NSDefaultRunLoopMode];
int i = 0;
while ([_runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) {
NSLog(@"_runLoop %i %@", i++, [NSDate date]);
}
assert(NO);
}
}
Run Code Online (Sandbox Code Playgroud)
它在线上崩溃了while.(顺便说一下,我添加了NSLog系列).当我点击"继续"或"跳过"时,线条指示灯会短暂闪烁,然后再次出现在同一条线上.请注意,它不会继续到NSLog行,也没有任何内容写入控制台.我目前仍然试图让它再次崩溃(这种特殊的崩溃是相当不可预测的),但如果我没记错的话,行指示器说EXC_BAD_ACCESS,可能是一个过早释放的对象.
在一个单独的项目中遇到此问题后,我进行了一个测试项目以验证该问题。
app。libraryone。libraryone,我向Gson添加了一个依赖项,并使用Gson使用单个静态方法添加了一个类。app,我向添加了一个依赖项libraryone。我和一起进行了简单的测试transitive = true,因为互联网似乎模糊地同意这样做可能会有所帮助。(它没有。)app,在MainActivity,我使用的班级libraryone。这行得通(只要我没有transitive = false设置)。MainActivity自身引用Gson 。无论是从Android Studio还是从命令行Gradle中,它都会给出“无法解析符号'Gson'”错误。这是不寻常的,而且令人不快,因为这意味着您必须在整个项目组中重复通用的依赖关系,并且这些类仍会包含在输出中。当然是我做错了什么,还是这是个错误?我的代码如下:
MainActivity.java(在中app)
package com.erhannis.test.dependencytest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.erhannis.test.libraryone.LibClass;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String s = LibClass.convert(new Object());
System.out.println("out: " + s);
new com.google.gson.Gson(); // This line gives a compile-time …Run Code Online (Sandbox Code Playgroud) dependencies android transitive-dependency android-gradle-plugin
I've seen a number of similar questions, but I don't think any were quite isomorphic, and none quite answered my question.
Suppose there are two interfaces, Tree and Named. Suppose further that I am given a method whose signature is
public <T extends Tree & Named> T getNamedTree();
How can I save the returned value to a variable, while still retaining the information that it implements both Tree and Named? I can't find a way of declaring a …
考虑以下:
class A {
commonString: string = "common";
}
class B extends A {
bString: string = "b";
}
class C extends A {
cString: string = "c";
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这就像一个非常普通的继承例子——事实上,这是最基本的例子之一。然而,如果我没看错的话,TypeScript 的继承机制不支持这种模式?考虑以下两个来源:
https://www.javatpoint.com/typescript-inheritance - “当从一个基类继承多个子类时,这种类型的继承称为层次继承。...TypeScript 不支持层次继承。”
https://www.w3spoint.com/inheritance-typescript - 在列出另一篇文章列出的五种继承类型后,说“TypeScript 仅支持单级继承和多级继承”。
我觉得这很难相信,原因有二:
b: B = B()行为如预期:如果我访问b.bString它很好,如果我访问b.cString它错误,如果我存储b: A = new B(),它可以工作,但如果我访问则编译错误b.bString(但在运行时bString实际上存在)。它的行为完全符合我的预期。那么,这是怎么回事?我是否误解了“层次继承”?给出的文章有错吗?Typescript 是否声称不支持它,但实际上它支持?我的编译器受到侏儒的祝福了吗?
更重要的是,我可以相信通常的“B 扩展 A,C 扩展 A”能够继续按预期工作吗?
考虑以下情况.这是假设的,但展示了我想要完成的一般事情.
假设我有一个文件,它有一行或多行.在每一行上,它可能有一个或多个[name]=的实例[value],其中[name]是一些变量名称并且[value]是某个值.进一步假设这些中的每一个都匹配/[a-zA-Z]+=[0-9]+/.
我想要的是一个perl表达式,它将打印出每个匹配,以特定方式格式化.我的意图是在命令行上使用它来解析文件中的数据.一个假设的解决方案,因为perl实际上不接受这种语法而变得无效:print m/([a-zA-Z]+)=([0-9]+)/name: \1, value: \2\n/g,当在每一行上运行时,在我们的理想世界中,将打印出每一行的每个匹配,例如name:[name], value:[value]每个格式化的匹配在它自己的行上.
例如,考虑这个输入文件test.txt:
blah blah count=5 blah i=1
books=2 blah
blah fairies=87 water=0
Run Code Online (Sandbox Code Playgroud)
假设我们然后将我们的魔术命令输入bash,如下所示:
perl -n -e 'print m/([a-zA-Z]+)=([0-9]+)/name: \1, value: \2\n/g' test.txt
Run Code Online (Sandbox Code Playgroud)
(对所有返回的匹配要求某种循环可能更合理,但希望你能得到这个想法.)
它将打印以下内容:
name: count, value: 5
name: i, value: 1
name: books, value: 2
name: fairies, value: 87
name: water, value: 0
Run Code Online (Sandbox Code Playgroud)
我意识到这种语法实际上并不起作用,但我想尽可能简单地完成同样的事情.我希望能够偶尔在命令行中使用它来查找和格式化文本.我编写了自己的ruby脚本,但它有点儿麻烦,并没有包含在标准环境中(或者在任何人的环境中,但我自己的).有人知道一些perl的秘密吗?
因此,根据我在Internet上阅读的大多数内容,Java 中可以拥有的线程数上限约为10,000。但是,实际上我可以创建近 500,000 个,此时我的计算机没有响应。(任务管理器有点滑稽——它开始声称虽然我的 16 GB 内存中有 99% 被使用,但使用率最高的程序只使用了大约 300 MB。在一切停止响应后,风扇安静下来,磁盘访问指示灯只是周期性闪烁,让我相信 CPU 和磁盘都没有承受重负载。)我等了大约 15 分钟的一个测试,但从未出现异常(嗯,据我所知)。
为了可重复性,我(也)使用了以下代码:https : //github.com/jheusser/core-java-performance-examples/blob/master/src/test/java/com/google/code/java/此处引用的core/threads/MaxThreadsMain.java:https : //dzone.com/articles/java-what-limit-number-threads。但是,我确实增加了ifrom 100 * 1000to 的上限1000 * 1000,因为它成功创建了所有线程。它在计算机冻结之前发出的最后一条消息是440,000 threads: Time to create 4,000 threads was 1.002 seconds- 不过,它看起来平均每 4000 秒大约 2 秒。
我使用的是 Windows 10 Pro,版本 1703。JRE:Java HotSpot(TM) 64 位服务器 VM(构建 9.0.4+11,混合模式)
我所知道的下一个最高线程数约为 100k,https: //stackoverflow.com/a/46697264/513038 。现在,许多声称的限制是多年前给出的,但它们基于堆栈大小与内存的比较,并且在 16 GB RAM 中有 500,000 …
斯威夫特 5.1。考虑以下。
let x: Any? = nil
let y: Any = x
print("x \(x)") // x nil
print("type(of: x) \(type(of: x))") // type(of: x) Optional<Any>
print("x == nil \(x == nil)") // x == nil true
print("y \(y)") // y nil
print("type(of: y) \(type(of: y))") // type(of: y) Optional<Any>
print("y == nil \(y == nil)") // y == nil false
Run Code Online (Sandbox Code Playgroud)
我们有两个变量,设置为相同的东西——nil。他们打印相同,他们的类型打印相同 - 但一个== nil和另一个没有。
Any,人们怎么会发现它实际上为零?ios ×3
android ×2
java ×2
swift ×2
bash ×1
c++ ×1
debugging ×1
dependencies ×1
generics ×1
heap ×1
inheritance ×1
java-threads ×1
limit ×1
move ×1
null ×1
objective-c ×1
observable ×1
perl ×1
pointers ×1
regex ×1
stack ×1
swiftui ×1
threshold ×1
touch ×1
types ×1
typescript ×1
variables ×1
xcode ×1
xcode5 ×1