我目前正在使用 phonegap 开发一个 android 应用程序。我有一个 html5 Canvas ,我正在上面绘制和动画对象。它在 android 2.3 上运行良好,但在 android 4+ 上它不会重绘 Canvas 。我尝试将 kinetic.js 和 easel.js/tween.js 用于我的动画,并且这两个库都出现了不清除 Canvas 的问题。我在 Canvas 上显示和隐藏一个 div 时取得了一些成功,但它并不总是有效。我只能假设这是一个 android 4+ 特定的错误或某种类型的功能来增强 html5 Canvas 性能。
有谁知道是否有一些我可以更改的设置或我可以在 android 4 或 javascript 中调用的方法,这将允许我在动画期间强制重绘我的 html5 Canvas ?
还应注意,动画似乎可以在 4.1 google api 模拟器中使用 easel.js/tween.js( Canvas 清除并重绘),但在运行 4.1.1 的手机上无效。
我对正在发生的事情做了一些进一步的研究。从本质上讲,动画开始时的形状似乎留下了 Artifact ,而 clearRect 无法清除。我有一个大圆圈,我正在缩小到一个小圆圈。动画仍然发生,但大圆圈不受在 Canvas 上调用 clearRect 的影响。
最佳答案
我也没有解决根本问题的方法,但我想出了另一个不完善的解决方法,不会给您的代码增加延迟。首先在 Canvas 上绘制一个虚拟对象。然后绘制动画对象(或可拖动对象。因为它也发生在拖动时)。似乎第一个绘制的对象是持久化的(即无法正常清除)。使用 KineticJs,我执行以下操作... 1.) 创建舞台,2.) 绘制一个对象(如舞台大小的矩形作为背景。请注意对象不能透明),3.)将图层添加到舞台,然后 4.) 运行 layer.draw()。
之后我可以在 Canvas 上绘制任何东西,它在 Android 中表现正常。 (参见下面的示例。没有背景,对象在第一次拖动时被复制。要测试它,只需将背景的不透明度设置为 0)。
一个警告:根据我目前的经验,任何给定层中的第一个对象都会发生这种情况。所以我必须调整舞台上的每一层。根据您的应用程序,它可能会或可能不会比向代码添加时间延迟更好。
这似乎是一个从 Android 4.1.x 开始的 Android bug 它不会出现在 4.0.x 中。并且在本周发送的最近升级到 4.1.2 时还没有修复。类似的问题与 CSS 中 overflow-x 属性的设置有关(参见 http://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=35474 )。
<script>
window.onload = function() {
var stage = new Kinetic.Stage({
container: "container",
width: 578,
height: 200
});
var boxLayer = new Kinetic.Layer();
stage.add(boxLayer);
var background = new Kinetic.Rect({
x: rectX,
y: rectY,
width: 578,
height: 200,
fill: "white",
stroke: "white",
strokeWidth: 4,
draggable: false
});
boxLayer.add(background)
boxLayer.draw();
var rectX = stage.getWidth() / 2 - 50;
var rectY = stage.getHeight() / 2 - 25;
var box = new Kinetic.Rect({
x: rectX,
y: rectY,
width: 100,
height: 50,
fill: "#00D2FF",
stroke: "black",
strokeWidth: 4,
draggable: true,
opacity: 1.0
});
boxLayer.add(box);
boxLayer.draw();
};
</script>
关于Android 4+ html5 Canvas 不重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12804710/
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我