小编Lok*_*tar的帖子

将多行文本绘制到Canvas

一个有希望的快速问题,但我似乎无法找到任何示例......我想View通过a 将多行文本写入自定义Canvas,并且onDraw()我有:

...
String text = "This is\nmulti-line\ntext";
canvas.drawText(text, 100, 100, mTextPaint);
...
Run Code Online (Sandbox Code Playgroud)

我希望这会导致换行,但相反,我会看到神秘的角色\n.

任何指针赞赏.

保罗

android android-canvas

116
推荐指数
9
解决办法
8万
查看次数

Android Canvas.drawText

我有一个视图,我在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 drawtext android-canvas

80
推荐指数
2
解决办法
17万
查看次数

在android中绘制带边框的填充矩形

Android中是否有任何方法可以绘制带有黑色边框的填充矩形.我的问题是canvas.draw()接受一个绘制对象,据我所知,绘制对象不能有填充和描边的不同颜色.有没有解决的办法?

android border paint fill android-canvas

47
推荐指数
3
解决办法
7万
查看次数

使用类似于Gmail添加计数的图像处理的动态图标

我试着弄清楚看源代码,但我无法理解.

我想知道如何使用Gmail这样的计数制作动态图标.

在此输入图像描述

有关如何做到这一点的任何想法?

javascript favicon canvas dynamic

37
推荐指数
1
解决办法
1万
查看次数

在Android中平滑地滚动画布

我是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的等价物吗?

android smooth-scrolling android-canvas

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

裁剪方形图像到圆圈 - 以编程方式

我正在寻找过去的一天,但我没有成功.

我从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)

android image crop android-canvas

21
推荐指数
3
解决办法
5万
查看次数

如何使用canvas imageData停止alpha-premultiplication?

有没有办法阻止画布数据的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以外的任何值).

有没有办法获得相同的输出?关于这个问题的任何想法?任何想法如何创建像这个问题的解决方法?

先感谢您!

javascript canvas rgba html5-canvas

14
推荐指数
2
解决办法
2466
查看次数

Android SweepGradient

我有一个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 gradient ondraw android-canvas

13
推荐指数
2
解决办法
4781
查看次数

在画布上绘图并保存图像

我是Android Graphics类的新手.我想使用触摸事件绘制图像(实际上是签名类型),并希望在我想保存时将其保存在SD卡上.我已经通过网络扫描了任何这样的教程,但我还没有找到.谁能告诉我如何使用触摸事件在画布上绘制并保存它.

任何教程或示例代码都会有很大帮助.

graphics android handwriting android-canvas

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

Canvas.clipPath上的Android UnsupportedOperationException

我在我的项目中使用来自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)

android exception android-canvas

11
推荐指数
1
解决办法
4526
查看次数