一个有希望的快速问题,但我似乎无法找到任何示例......我想View通过a 将多行文本写入自定义Canvas,并且onDraw()我有:
...
String text = "This is\nmulti-line\ntext";
canvas.drawText(text, 100, 100, mTextPaint);
...
Run Code Online (Sandbox Code Playgroud)
我希望这会导致换行,但相反,我会看到神秘的角色\n.
任何指针赞赏.
保罗
我有一个视图,我在onDraw(Canvas画布)方法中使用Canvas对象进行绘制.我的代码是:
Paint paint = new Paint();
paint.setColor(Color.WHITE);
paint.setStyle(Style.FILL);
canvas.drawPaint(paint);
paint.setColor(android.R.color.black);
paint.setTextSize(20);
canvas.drawText("Some Text", 10, 25, paint);
Run Code Online (Sandbox Code Playgroud)
问题是文字没有透过背景显示,我做错了什么?如果我删除canvas.drawPaint(paint)和paint.setColor(android.R.color.black),你可以看到屏幕上的文字......
Android中是否有任何方法可以绘制带有黑色边框的填充矩形.我的问题是canvas.draw()接受一个绘制对象,据我所知,绘制对象不能有填充和描边的不同颜色.有没有解决的办法?
我试着弄清楚看源代码,但我无法理解.
我想知道如何使用Gmail这样的计数制作动态图标.

有关如何做到这一点的任何想法?
我是Android的新手.
我正在我的视图的OnDraw(Canvas画布)方法中的Canvas上绘制位图,线条和形状.我正在寻找有关如何实现平滑滚动以响应用户拖动的帮助.我已经搜索但没有找到任何教程来帮助我.
Canvas的引用似乎表明,如果Canvas是从Bitmap构建的(比方说称为bmpBuffer),那么在Canvas上绘制的任何内容也会在bmpBuffer上绘制.是否可以使用bmpBuffer来实现滚动...也许可以将它复制回Canvas一次移动几个像素?但是如果我使用Canvas.drawBitmap将bmpBuffer绘制回Canvas移动几个像素,bmpBuffer会不会被破坏?因此,也许,我应该将bmpBuffer复制到bmpBuffer2,然后将bmpBuffer2绘制回Canvas.
一个更直接的方法是将线条,形状等直接绘制到缓冲区中Bitmap然后将该缓冲区(带有移位)绘制到Canvas上,但我可以看到各种方法:drawLine(),drawShape()等等不能用于绘制到Bitmap ...仅用于Canvas.
我可以有2幅画布吗?其中一个是从缓冲区位图构造的,仅用于绘制线条,形状等,然后缓冲区位图将被绘制到另一个Canvas中以便在View中显示?
我应该欢迎任何建议!
这里(和其他网站上)类似问题的答案是指"blitting".我理解这个概念,但在Android文档中找不到关于"blit"或"bitblt"的任何内容.Canvas.drawBitmap和Bitmap.Copy是Android的等价物吗?
我正在寻找过去的一天,但我没有成功.
我从API获取图像,然后使用以下代码将其下载到位图文件.
private Bitmap DownloadImage(String URL)
{
Bitmap bitmap = null;
InputStream in = null;
try
{
in = OpenHttpConnection(URL);
bitmap = BitmapFactory.decodeStream(in);
in.close();
}
catch (IOException e1)
{
e1.printStackTrace();
}
return bitmap;
}
private InputStream OpenHttpConnection(String urlString) throws IOException
{
InputStream in = null;
int response = -1;
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
if (!(conn instanceof HttpURLConnection))
throw new IOException("Not an HTTP connection");
try
{
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();
response …Run Code Online (Sandbox Code Playgroud) 有没有办法阻止画布数据的alpha通道的预乘或解决方法?
我想生成一个图像(在这种情况下是一些随机的rgba值)并将画布保存为图像.
在第二步中,我想使用imageData将原始图像与生成的图像进行比较,但是由于生成的图像中我的rgba像素的alpha通道的预乘,这不起作用.
function drawImage(ctx) {
var img = ctx.createImageData(canvas.width,canvas.height);
for (var i=img.data.length;i-=4;) {
img.data[i] = Math.floor(Math.random() * 255);
img.data[i+1] = Math.floor(Math.random() * 255);
img.data[i+2] = Math.floor(Math.random() * 255);
img.data[i+3] = Math.floor(Math.random() * 255);
}
ctx.putImageData(img, 0, 0);
// our image data we just set
console.log(img.data);
// the image data we just placed onto the canvas
console.log(ctx.getImageData(0,0,canvas.width, canvas.height).data);
}
Run Code Online (Sandbox Code Playgroud)
在控制台中,您将找到两个console.log输出.第一个在预乘之前,第二个在预乘之后.这两个输出是不同的,一些值偏离3或更多.这仅在涉及部分透明度时发生(将alpha设置为255以外的任何值).
有没有办法获得相同的输出?关于这个问题的任何想法?任何想法如何创建像这个问题的解决方法?
先感谢您!
我有一个SweepGradient定义为
circle_paint.setShader(new SweepGradient(getWidth()/2, getHeight()/2, new int[] { circle_start_color, circle_end_color}, new float[] { 0f, 1f}))
Run Code Online (Sandbox Code Playgroud)
应用于定义为的拱门
canvas.drawArc(circle_bounds, circle_start_perc*360f, circle_end_perc*360f, true, circle_paint);
Run Code Online (Sandbox Code Playgroud)
这很好用,但我需要拱门从屏幕顶部开始绘图,即
canvas.drawArc(circle_bounds, ((circle_start_perc*360f)-90f)%360, circle_end_perc*360f, true, circle_paint);
Run Code Online (Sandbox Code Playgroud)
问题是SweepGradient似乎仍然从0度开始,我需要它从270度开始(类似于绘制弧线时的平移).换句话说,如果我有一个从白色到蓝色的渐变,我需要将弧的顶部涂成白色,并将弧的最后部分涂成蓝色.我怎样才能做到这一点?
我是Android Graphics类的新手.我想使用触摸事件绘制图像(实际上是签名类型),并希望在我想保存时将其保存在SD卡上.我已经通过网络扫描了任何这样的教程,但我还没有找到.谁能告诉我如何使用触摸事件在画布上绘制并保存它.
任何教程或示例代码都会有很大帮助.
我在我的项目中使用来自https://github.com/lvillani/android-cropimage的图像裁剪库来裁剪存储在设备上的图像.
但是,某些用户使用以下堆栈跟踪报告崩溃
java.lang.UnsupportedOperationException
at android.view.GLES20Canvas.clipPath(GLES20Canvas.java:413)
at com.android.camera.HighlightView.draw(HighlightView.java:101)
at com.android.camera.CropImageView.onDraw(CropImage.java:783)
at android.view.View.draw(View.java:11006)
at android.view.View.getDisplayList(View.java:10445)
at android.view.ViewGroup.drawChild(ViewGroup.java:2850)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
at android.view.View.getDisplayList(View.java:10443)
at android.view.ViewGroup.drawChild(ViewGroup.java:2850)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
at android.view.View.getDisplayList(View.java:10443)
at android.view.ViewGroup.drawChild(ViewGroup.java:2850)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
at android.view.View.getDisplayList(View.java:10443)
at android.view.ViewGroup.drawChild(ViewGroup.java:2850)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
at android.view.View.getDisplayList(View.java:10443)
at android.view.ViewGroup.drawChild(ViewGroup.java:2850)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
at android.view.View.draw(View.java:11009)
at android.widget.FrameLayout.draw(FrameLayout.java:450)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2154)
at android.view.View.getDisplayList(View.java:10445)
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:853)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:1961)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1679)
at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2558)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4697)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
从搜索我认为它只是由某些设备上的硬件加速引起的.我在清单中禁用了硬件加速,但异常仍在发生.我还发现"一个可靠的解决方法是识别代码中有问题的操作,将其绘制到位图中,然后将位图blit到加速画布."
根据堆栈跟踪的有问题的代码是
protected …Run Code Online (Sandbox Code Playgroud)