我经常被告知CSS 3D变换是Mobile Safari中的硬件加速,这让我想知道这意味着2D变换是不是?我可以想到他们没有理由,因为他们基本上都可以实现为3D变换,但我想知道.
如果事实证明2D变换不是硬件加速,那么任何关于为什么会有所了解的见解.
我在我的应用程序中启用了硬件加速,但是我已经禁用了我的一个观点,因为我遇到了中风帽等问题.
现在我在Google Play Crash Errors控制台中获得此堆栈跟踪:
java.lang.UnsupportedOperationException
at android.view.GLES20Canvas.clipPath(GLES20Canvas.java:287)
at com.myapp.MyCustomView.onDraw(SourceFile:288)
at android.view.View.draw(View.java:9310)
at android.view.View.getDisplayList(View.java:8773)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2298)
...
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:609)
at android.view.ViewRoot.draw(ViewRoot.java:1634)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1450)
at android.view.ViewRoot.handleMessage(ViewRoot.java:2094)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4123)
...
Run Code Online (Sandbox Code Playgroud)
我android:hardwareAccelerated="true"在AndroidManifest.xml中指定了.但是我在自定义视图的构造函数中专门禁用了硬件加速:
public MyCustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// ... code omitted
// disable acceleration because Paint.setStrokeCap(Cap.ROUND) is not working otherwise
Compatibility.disableHardwareAcceleration(this);
}
Run Code Online (Sandbox Code Playgroud)
兼容性是这样的:
public class Compatibility {
// View.setLayerType() was introduced in Honeycomb
private static Method setLayerTypeMethod = getMethod(View.class, "setLayerType", int.class, …Run Code Online (Sandbox Code Playgroud) 因此,我试图了解如何在View持久动画的自定义中正确使用硬件加速(如果可用).这是我的基本前提onDraw():
canvas.drawColor(mBackgroundColor);
for (Layer layer : mLayers) {
canvas.save();
canvas.translate(layer.x, layer.y);
//Draw that number of images in a grid, offset by -1
for (int i = -1; i < layer.xCount - 1; i++) {
for (int j = -1; j < layer.yCount - 1; j++) {
canvas.drawBitmap(layer.bitmap, layer.w * i, layer.h * j, null);
}
}
//If the layer's x has moved past its width, reset back to a seamless position
layer.x += ((difference * layer.xSpeed) …Run Code Online (Sandbox Code Playgroud) 我正在学习 Three.js 并创建了一个简单的应用程序,希望它能够在我的专用 GPU 上运行,但任务管理器显示场景渲染时 GPU 利用率为 0%(所有值),集成显卡利用率为 80-90%。我尝试了几个使用 WebGL 的网站,结果都是一样的。这是我所知道的:
powerPreference: 'high-performance'看似什么也没做。edge://gpu/似乎检测到我的 GPU,因为 ctrl-f“nvidia” 找到了一些设置为我的 GPU 名称的值。不过,我真的不知道在这里要寻找什么,这主要是我不理解的价值观。ANGLE (Intel, Intel(R) HD Graphics 530 Direct3D11 vs_5_0 ps_5_0, D3D11-21.20.16.4550)在“Unmasked Renderer”下。我的问题是:浏览器如何决定使用哪个图形处理器?有没有办法控制最终用户和网站开发人员的这种选择?
我已经阅读了有关属性动画和硬件加速的内容,但我仍然不确定使用动画类的最有效方法是什么.(为了这个问题,我不需要在Honeycomb之前支持设备.所以我想使用动画类.)
例如,假设我有一个视图.在这个视图中,我有一个我想要淡入的BitmapDrawable.视图中还有许多其他元素不会改变.
什么属性或对象最好与动画师一起使用?可画的?我在onDraw中绘制位图的颜料?别的什么?
如何通过硬件加速实现最高效?这是否需要为动画的每个步骤调用invalidate,或者是否有一种方法可以为drawable设置动画并且不会导致视图的其余部分在动画的每个步骤中完全重绘?
我想我认为最佳情况是视图的其余部分不必在软件中完全重绘,而是硬件加速有效地淡化了drawable.
有关推荐方法的建议或指示吗?
谢谢!
我正在尝试构建一个Phonegap应用程序,允许用户通过移动中间分隔符来更改两列布局的大小.
我能够使这个工作,但有一个巨大的UX问题:它是滞后的.这并不可怕,但在最新的iPad上,它甚至引人注目,让我担心.
这是我的JS调整大小:
$("div").on("touchmove", "#columnResizeIcon", function(e) {
e.preventDefault();
var left = e.originalEvent.touches[0].pageX;
var right = $("#columnContainer").width() - left;
$("#leftColumn").css({
"width":left - 1 + "px",
"right":"auto",
});
$("#rightColumn").css({
"width":right - 1 + "px",
"left":"auto",
});
$("#columnResize").css({
"-webkit-transform":"translate3d(" + left + "px" + ", 0, 0)",
"left":"auto",
});
$("#columnResizeIcon").css({
"-webkit-transform":"translate3d(" + left + "px" + ", 0, 0)",
"left":"auto",
});
});
Run Code Online (Sandbox Code Playgroud)
您会注意到我利用translate3d()更改元素的"左"值,因为这是硬件加速.我相信滞后是通过改变左右列的宽度产生的,这是我需要硬件加速的.
我认为可能有效的解决方案是使用-webkit-transform:translate3d(50%, 0, 0)将右列推到页面的一半,然后只更改该值,希望它只会延伸到达父级.然而,它继续,并且占据了页面的50%,而不是父母的50%.
我的HTML标记如下所示:
<div id="columnContainer">
<div id="columnResize"></div>
<div id="columnResizeIcon"></div>
<div id="leftColumn">
<div class="header">Left Header</div>
<div …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个可缩放的容器,我的目标是API 14+
在我的onScale中(我使用ScaleGestureDetector来检测捏缩放)我正在做这样的事情:
public boolean onScale (ScaleGestureDetector detector) {
float scaleFactor = detector.getScaleFactor();
setScaleX(getScaleX() * scaleFactor);
setScaleY(getScaleY() * scaleFactor);
return true;
};
Run Code Online (Sandbox Code Playgroud)
它工作但缩放不顺畅.事实上,它明显闪烁.
我也尝试过硬件层认为一旦纹理上传就会在GPU上进行缩放,因此速度非常快.但它并没有什么区别 - 变焦不是很平滑,有时候也很奇怪.
我究竟做错了什么?
我正在尝试使用Cordova在Android 4.3.1上运行ionic-angular-cordova-seed项目.我注意到的一件事是页面转换(例如,单击选项卡或列表项)非常慢.
我尝试使用以下方法禁用硬件加速:
super.appView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
Run Code Online (Sandbox Code Playgroud)
......它完美无缺.但随后滚动,侧面菜单滑动和更多动画变得极其缓慢.
我尝试过FastClick,它没有任何区别.
我找到了这个基于CSS的解决方案来解决这个问题,但我对Ionic不太熟悉,无法将其应用到它上面.有任何想法吗?
注意:我没有使用任何动画进行页面转换.
我目前正在直接绘制提供给我的视图的onDraw方法的Canvas对象.这个画布是硬件加速的.特别是,我使用RadialGradient着色器和OVERLAY PorterDuff模式绘制多个圆圈.但是,当我尝试将相同的绘制过程应用于我手动创建的画布时,我得不到相同的结果.我相信这是因为为位图创建的canvas对象不是硬件加速的.
对于视图,代码看起来像这样:
public class MyView extends View {
private Paint mPaint;
private List<Shader> mShaders;
public MyView(Context context) {
super(context);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG|Paint.DITHER_FLAG);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.OVERLAY));
mShaders = new ArrayList<Shader>(); // assume x, y, r, and color vals are defined.
mShaders.add(new RadialGradient(x1, y1, r1, c11, c12, Shader.TileMode.CLAMP));
mShaders.add(new RadialGradient(x2, y2, r2, c21, c22, Shader.TileMode.CLAMP));
}
@Override
protected void onDraw(Canvas canvas) {
mPaint.setShader(mShaders.get(0));
canvas.drawCircle(x1, y1, r1, mPaint);
mPaint.setShader(mShaders.get(1));
canvas.drawCircle(x2, y2, r2, mPaint);
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很顺利.圆圈在硬件加速画布上按预期绘制.
但是,如果我这样做:
...
Bitmap bitmap = Bitmap.createBitmap(w, …Run Code Online (Sandbox Code Playgroud) 我在使用Windows 7的Hp dm4 Intel Core i5机器上.当我编译应用程序时,我的Android Studio给出了以下错误.

经过一些谷歌搜索后,我发现我必须安装Android SDK附带的英特尔硬件加速执行管理器.但是当我尝试这样做时,我得到了这个错误.

这是否与硬件虚拟化有关?我已经从BIOS启用了它.

我不明白问题是什么.请帮忙!
编辑:我Windows Hardware-Assisted Virtualization Detection Tool从微软网站下载了它,它说一切都很好.这太疯狂了!
android ×7
performance ×2
android-ui ×1
android-view ×1
animation ×1
bitmap ×1
canvas ×1
cordova ×1
css ×1
css3 ×1
drawing ×1
gpu ×1
javascript ×1
jquery ×1
three.js ×1
view ×1
webgl ×1