我正在编写一个使用Canvas定位元素的地图应用程序.对于每个元素,我必须以编程方式将元素的Lat/Long转换为画布的坐标,然后设置Canvas.Top和Canvas.Left属性.
如果我有一个360x180画布,我可以将画布上的坐标转换为X轴上的-180到180而不是0到360,而Y轴上的90到-90而不是0到180?
扩展要求:
哪个JavaScript库(免费或商业)可以构建计算机网络图或电气图.此外,它支持图表中不同项目之间的动画等.
谢谢.
我正在开发一个Android应用程序,应该允许用户在画布上绘制一个圆圈并拖动它.我已经能够在上面绘制线条和圆圈.但我似乎无法拖动它.
是否可以在Android中拖动画布上绘制的对象?例如,如果我在圆圈内检测到触摸,如何从先前位置删除圆圈并将其移动到当前位置?我试过了invalidate().但是如果用户绘制了多个圆圈并想要移动它们,它就无法工作.
我正在开发一个应用程序,它在一堆图像上绘制线条.为了选择这些图像,我有一个广播组,每当用户点击一个单选按钮时,图像就会加载所有图纸.
在我的收音机听众中,我有以下代码:
bitmap = BitmapUtils.decodeSampledBitmapFromResource(root + DefinesAndroid.CAMINHO_SHOPPINGS_SDCARD + nomeImagemAtual, size.x, size.y);
mImage.setImageBitmap(bitmap);
mImage.setDrawLines(true);
mImage.setImageBitmap(loadBitmapFromView(mImage));
Run Code Online (Sandbox Code Playgroud)
decodeSampledBitmapFromResource我从Android开发人员的这个链接获得的方法(它更有效地加载位图)http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
这是我调用以获取视图位图的方法
public static Bitmap loadBitmapFromView(View v) {
Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
v.draw(c);
return b;
}
Run Code Online (Sandbox Code Playgroud)
我正在设置图像Bitmap,mImage因为我正在使用ImageViewTouch库(它可以在ImageView上进行缩放缩放),如果我不这样做,所有画布绘图都会被删除,图像上的任何交互都会被删除(比如放大/出).
错误日志如下
07-11 21:13:41.567: E/AndroidRuntime(20056): java.lang.IllegalArgumentException: width and height must be > 0
07-11 21:13:41.567: E/AndroidRuntime(20056): at android.graphics.Bitmap.createBitmap(Bitmap.java:638)
07-11 21:13:41.567: E/AndroidRuntime(20056): at android.graphics.Bitmap.createBitmap(Bitmap.java:620)
Run Code Online (Sandbox Code Playgroud)
我几乎可以肯定这个错误正在发生,因为当我调用getBitmapFromView方法时图像位图没有完全加载.
如何知道视图何时完全加载?
我知道您可以使用画布从HTML5视频流中捕获图像并在页面上显示它们.我感兴趣的是你可以使用canvas对象在网页上创建一个叠加层,然后捕获该页面或其中一部分的PNG快照.
我想通过添加屏幕截图(在浏览器页面内)来增强我们的网站审阅工具,然后可以将其提交到远程服务器.
YouTrack使用Java applet实现这一点,但现代HTML5技术是否可行?
对此问题的任何其他建议的解决方案也将不胜感激.
谢谢
我正在做一个围绕X中心的图形,Y为0,0.当渲染时,我使用translate重新定位,然后使用scale使图形填充画布(例如,将所有内容缩放50%).
我注意到你是否调用scale然后翻译,翻译然后扩展并且我无法理解它是很重要的.这是一个问题,因为一切并不总是合适,但我的心智模型并不完整,所以很难修复它.
有人可以解释为什么缩放和翻译调用的顺序很重要吗?
好的,在Windows窗体中,您可以使用它.refresh()来在元素上生成重绘事件.WPF中是否有类似的解决方案?
解释我正在做什么,我在画布对象上绘制一个迷宫,并希望看到迷宫被绘制(所以我可以看到进展),而不是等待28分钟突然出现的解决方案.我在画布上用一系列Rectangles 绘制块.刷新应该在矩形还是画布上?
这是最近的输出:http: //imgur.com/ftFOv
如果有可能,我想在c#中找到解决方案.谢谢.
在Microsoft触摸设备(例如Surface Pro)上,在Chrome和IE上,可以捕获鼠标/指针/触摸事件,并在此过程中阻止滚动页面.
在Firefox上,在阻止页面滚动触摸时获得相同级别的活动似乎是不可能的.您可以通过阻止"滚动"来阻止页面滚动:
can.addEventListener('wheel', function(e) {
console.log('stopping wheel')
e.preventDefault();
}, false);
Run Code Online (Sandbox Code Playgroud)
但Firefox似乎不会发出您可以侦听的鼠标/指针/触摸事件,因此您无法执行相同的操作.
这里有一个实例:
https://codepen.io/simonsarris/pen/PJwMay
使用Surface上的触摸:您可以在Chrome和IE中的画布上绘图,但是您无法在Firefox中绘制它.如果您注释掉"wheel"监听器,Firefox将另外滚动页面.
所以问题是:在Firefox中获得HTML Element触摸交互需要什么,与系统上的其他浏览器相同?
为了简单起见,我们假设我正在为Android制作一个简单的Pong克隆游戏.让我们假设它只能在横向模式下播放.(现在忽略方形手机).
我希望游戏能够在每部手机上以相同的比例显示,如果您在QVGA手机上截取游戏截图,并将屏幕截图重新调整为WVGA尺寸,它看起来几乎与游戏相同看看WVGA手机.换句话说,桨的宽度应始终为屏幕宽度的1/32,球的直径应始终为屏幕宽度的1/16.
绘制应用程序的正确方法是什么?它将在标准的SurfaceView中运行,并将其绘制到Canvas.
假设我有一个高分辨率的PNG用于球拍,球和游戏字体(记分牌,主菜单).
我是否找到物理分辨率,然后缩放Canvas通道scale(float sx, float sy)以使我的所有画布(在QVGA和WVGA上)具有相同的虚拟分辨率,然后在每个屏幕尺寸的每个位置上绘制完全相同的图元?
或者我可以在画布中以某种方式使用与密度无关的像素(倾角)吗?
看一下这里的例子:http://www.brianhare.com/physics/so.html
看看我在使用这两个主要功能的console.log:
function distanceBetween2pts(x1, y1, x2, y2) {
console.log("Particle: ("+x1+","+y1+") Mouse: ("+x2+","+y2+")");
// Pythagoras Theorem
// PQ = sqrt( (x2-x1)^2 + (y2-y1)^2 )
var x = (x2-x1);
var y = (y2-y1);
this.radius = Math.sqrt(x*x + y*y);
this.x = x;
this.y = y;
}
function polar2cartesian(R, theta) {
this.x = R * Math.cos(theta);
this.y= R * Math.sin(theta);
}
Run Code Online (Sandbox Code Playgroud)
当鼠标位于粒子的上方和右侧(中心圆)时,例如:

控制台日志显示:
Particle: (300,250) Mouse: (326,223)
artan(-27 / 26) = angle: -46.08092418666069 - theta -0.8042638494191191
Run Code Online (Sandbox Code Playgroud)
它应该是arctan(27/26)=角度:46:theta = 0.8.因为即使老鼠在中心"上方",它也会将y2-y1读为-27,因为坐标系统基于左上方的0,0.
那么问题是当X和Y都为负时使θ为正,而它应该指向相反的方向(从中心点向外).我知道我可以在这里做一个180度的技巧,但我想知道我做错了什么.