小编zie*_*ikk的帖子

浅色/暗淡触感

我目前正在开发的应用程序使用了很多ImageViews作为按钮.这些按钮上的图形使用Alpha通道淡出按钮的边缘,使它们看起来不规则.目前,我们必须为每个按钮生成2个图形(1个用于选定/聚焦/按下状态,另一个用于默认的未选择状态),并使用XML文件中为每个按钮定义的StateListDrawable.

虽然这很好用但看起来非常浪费,因为所有选定的图形都只是未选定按钮的着色版本.这些花费时间来制作(无论多少)并占用最终APK中的空间.似乎应该有一个简单的方法来自动.

看起来,完美的解决方案是为每个按钮使用ImageViews,并在其tint属性中指定ColorStateList.这种方法的优点是,所有按钮(共享相同色调)只需要一个XML ColorStateList.但它不起作用.如前所述这里,ImageView的抛出NumberFormatException异常时提供给色调值以外的任何其他单一颜色.

我的下一次尝试是为选定的drawable使用LayerDrawable.在图层列表中,我们将原始图像放在堆栈底部,由半透明矩形覆盖.这适用于按钮图形的实体部分.然而,应该是完全透明的边缘现在与顶层的颜色相同.

有没有人遇到过这个问题,找到了合理的解决方案?我想坚持使用XML方法,但可能会编写一个简单的ImageView子类,它将在代码中进行所需的着色.

android android-xml

16
推荐指数
3
解决办法
1万
查看次数

Android中的并发文件访问

我知道许多操作系统在文件系统上执行某种锁定以防止视图不一致.Java和/或Android是否保证文件访问的线程安全性?在我继续编写并发代码之前,我想尽可能多地了解这一点.

如果我错过了一个回答类似的问题,请随时关闭此主题.谢谢.

java filesystems concurrency android

10
推荐指数
2
解决办法
3524
查看次数

Java Process InputStream错误?

大家好.所以这里是交易.我有一个Java程序运行C++程序.C++进程通过简单地使用一些指针转换调用std :: cout上的write来向Java程序发送一些双精度数.Java程序使用Process的getInputStream(),读取8个字节,并使用一些字节移位和Double.longBitsToDouble()将它们转换为double.我确保两个应用程序之间的类型大小和字节顺序匹配.现在,虽然这在大多数情况下都有效,但每次都会发生错误.

我已将其中一个错误隔离到一个简单的字节序列,我似乎无法正确传输.请查看以下代码段:

#include <iostream>

int main(int argc, char** argv) {
  long long l = 0x4048e398b90ae1b6;
  char* ptr = (char*) &l;
  std::cout.write(ptr, 8);
  std::cout.flush();


  //  for (int i = 0; i < 8; ++i)
  //    std::cout.put(ptr[i]);
  //  std::cout.flush()
}
Run Code Online (Sandbox Code Playgroud)

和Java应用程序:

public static void main(String[] argv) throws IOException {
  Process p = Runtime.getRuntime().exec("prog.exe");
  InputStream is = p.getInputStream();

  for (int i = 0 ; i < 8; ++i) {
    System.err.print(Long.toHexString(is.read()) + " ");
  }
}
Run Code Online (Sandbox Code Playgroud)

这些是非常简单的示例,但它们用于演示我的问题.当我在Windows 7机器上运行它时.我得到以下Java输出:

b6 e1 d a …
Run Code Online (Sandbox Code Playgroud)

c++ java inputstream

2
推荐指数
1
解决办法
705
查看次数