小编fej*_*ejd的帖子

水平LinearGradient与android

这一定是一个简单的,但我真的很茫然......以下代码绘制了一个矩形,其线性渐变从左到右,从白色到黑色,

int x1 = 0, y1 = 0, x2 = 100,  y2 = 40;
Shader shader = new LinearGradient(x1, y1, x2, y2, Color.WHITE, Color.BLACK, TileMode.CLAMP);
Paint paint = new Paint();
paint.setShader(shader);
canvas.drawRect(new RectF(x1, y1, x2, y2), paint);
Run Code Online (Sandbox Code Playgroud)

好的.现在我要做的是将此渐变更改为水平渐变,使颜色从白色变为黑色,从上到下.我试图做的是添加:

Matrix trans = new Matrix();
trans.setRotate(90);
shader.setLocalMatrix(trans);
Run Code Online (Sandbox Code Playgroud)

但相反,渐变是一个有趣的天使,或者只有一种颜色......我也试图以各种方式玩渐变的坐标(认为可能它们应该被转换)无济于事.我错过了什么?

android

35
推荐指数
2
解决办法
3万
查看次数

使用adjustPan作为软输入模式时,是否可以始终显示操作栏?

在我的应用程序中,我有一个带有页脚的ListView,其中包含一个带有EditText的自定义视图.顶部有一个动作栏.当前活动使用SOFT_INPUT_ADJUST_RESIZE(adjustResize)作为软输入模式,并且在滚动时不关闭键盘.

为了显示更多列表,我想在滚动时移除键盘并获得更平滑的滚动行为,我想要更改以便使用SOFT_INPUT_ADJUST_PAN(adjustPan).但是,如果我改为adjustPan,则整个视图(包括操作栏)会被推高.我希望列表视图被推送,但操作栏始终保持在顶部.这可能吗?如果没有,是否可以使用adjustResize并获得平滑的调整大小动画?

到目前为止,我尝试过:

  • 请求Window.FEATURE_ACTION_BAR_OVERLAY,但这没有帮助,虽然文档听起来很有希望.
  • 根据软键盘是否可见来移动操作栏容器,最终看起来像一个大规模不稳定的黑客,所以我废弃它.
  • 到目前为止adjustResize,由于滚动时发生的绘图行为,最小化键盘并同时调整列表视图的大小,我已排除了这一点.有没有办法制作流畅的动画调整大小?

android android-layout android-softkeyboard android-windowmanager android-actionbar

15
推荐指数
1
解决办法
1689
查看次数

在向后兼容的代码中有这么多已弃用的方法可以吗?

我正在编写一个针对API级别15的Android应用程序,但我也希望保持与旧API级别(min-sdk 7)的向后兼容性.

我将通过根据当前API级别决定使用哪些代码来实现这一目标(如下所示).我想这是一个好办法,我只想问是否确定有这么多不赞成的方法(像display.getWidth()),因为API级别8和15之间.如果是的话相当多的变化,如果它是一个良好的使用@SuppressWarning("deprecation")在这个案例?

例如,对于API级别<= 8和> = 9,使用多个APK不是更好吗?(尽管developer.android.com不推荐这样做.

    Display display = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    Point screenSize = new Point();

    // calculate the width
    float width;
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
      display.getSize(screenSize);
      width = screenSize.x;
    } else {
      width = display.getWidth();
    }
Run Code Online (Sandbox Code Playgroud)

谢谢!

android warnings backwards-compatibility deprecated

7
推荐指数
1
解决办法
3069
查看次数

非QObject派生类应该"总是"放在堆栈上吗?

来自Symbian世界,我习惯尽可能多地使用堆来避免堆栈空间耗尽,尤其是在处理描述符时.CBase派生类总是在堆上动态分配,因为如果它们不是,它们的成员变量将保持未初始化.相同的约定是否适用于QObject派生类?

在Qt中,将(例如QString)放在堆栈上似乎很常见.当QString充当堆栈上的容器时,字符串内容是否放在堆上,或者是否所有内容都放在堆栈上?

qstring qt memory-management qobject

5
推荐指数
1
解决办法
1324
查看次数

如何使用 UiAutomator 访问覆盖窗口?

我有一个应用程序,它使用两个进程来显示 UI 组件 - 一个用于主应用程序,它使用常规活动,另一个应用程序的 UI 由覆盖层(位于 Service 中)组成,这些覆盖层使用 ViewManager API 添加到 WindowManager。我想使用 UiAutomator 测试叠加层和应用程序之间的交互。

如本问题所述,覆盖视图/窗口很难直接访问。如果我将覆盖层移至主进程,我可以通过使用反射调用 WindowManagerGlobal 上的方法来访问视图,就像 Appium 在此处所做的那样,但如果它们在覆盖层进程中运行,则对 WindowManagerGlobal 的调用不会返回视图。在任何情况下,测试都无法与视图交互,因为只有创建视图的线程才能访问它们,除非通过 UiAutomator 使用的辅助功能框架来访问它们。

有什么方法可以通过辅助功能框架公开覆盖视图,以便 UiAutomator 可以找到它们,即使它们在不同的进程中运行?

我查看了multiprocess Espresso,这听起来非常有前途,因为它有可能弥合两个进程之间的差距,但 Espresso 找不到覆盖视图。是否可以改变添加叠加层的方式,也许可以通过为该过程提供某种根窗口,让 UiAutomator 甚至可能是 Espresso 找到叠加视图?

如果我使用UiDevice转储视图层次结构,我确实会看到系统装饰视图与应用程序的视图位于同一级别。我查看了将视图添加到 WindowManager 的 SystemUI 代码,它与应用程序添加其叠加层的方式非常相似。与我所看到的唯一区别是图层类型。了解系统 UI 组件如何注入到该层次结构(没有更好的词),以及是否可以对应用程序创建的覆盖层执行相同的操作,这将是很有趣的。

android accessibility android-windowmanager android-uiautomator

5
推荐指数
1
解决办法
1189
查看次数