标签: android-canvas

Android油漆/帆布问题; 绘制平滑曲线

在Android中用手指在触摸屏上绘图时,如何获得平滑曲线而不是圆点或圆圈?我使用以下代码 -

public class DrawView extends View implements OnTouchListener {
private static final String TAG = "DrawView";

List<Point> points = new ArrayList<Point>();
Paint paint = new Paint();

public DrawView(Context context) {
    super(context);
    setFocusable(true);
    setFocusableInTouchMode(true);

    this.setOnTouchListener(this);

    paint.setColor(Color.WHITE);
    paint.setAntiAlias(true);
}

     @Override
    public void onDraw(Canvas canvas) {
    for (Point point : points) {
        canvas.drawCircle(point.x, point.y, 5, paint);
        // Log.d(TAG, "Painting: "+point);
    }
}

public boolean onTouch(View view, MotionEvent event) {
    // if(event.getAction() != MotionEvent.ACTION_DOWN)
    // return super.onTouchEvent(event);
    Point point = new Point();
    point.x …
Run Code Online (Sandbox Code Playgroud)

android paint curvesmoothing draw android-canvas

3
推荐指数
1
解决办法
7603
查看次数

我如何画出半透明的白线?

我将hexcode作为#70ffffff用于颜色,我所做的就是canvas.drawline()和paint将颜色设置为该十六进制.

p = new Paint();
p.setColor(R.color.transparentwhite);
p.setStrokeWidth(15);
canvas.drawLine(a.getCenterX(), a.getCenterY(), 
                          a.getPrevious().getCenterX(), a.getPrevious().getCenterY(), p);
Run Code Online (Sandbox Code Playgroud)

android paint line draw android-canvas

3
推荐指数
1
解决办法
4275
查看次数

捕获画布的部分部分以将其用作位图

我正在研究一种我希望将画布的某些部分用作位图的东西

.在这里,我已附加图像.我想要一个矩形的位图核心(有Stork)

这是我的程序算法.

1:创建一个画布.

2:在画布上画一个颜色选择器.

3:在画布上绘制一个矩形.

现在我想将这个矩形用作位图..

那么有没有办法使用画布捕获位图 ?(我听说Picture类捕获画布,我不知道它与这种情况有关)

在这里输入图像 .

android android-canvas

3
推荐指数
1
解决办法
2059
查看次数

Android Canvas.drawLine不流畅,不一致

我正在尝试使用Canvas.drawLine方法绘制多边形

这是我正在使用的代码

Canvas canvas = new Canvas(cache);
Paint paint = new Paint();
paint.setStrokeWidth(16);
paint.setColor(this.currentDrawing.getColor());
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
systemCanvas.drawBitmap(cache, 0, 0, paint);
paint.setStrokeCap(Cap.ROOUND);
canvas.drawLine(from.getLeft(), from.getTop(), to.getLeft(), to.getTop(), paint);
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

在此输入图像描述

注意线条渲染的方式,它们在圆形形状上打破并且不能平滑地连接.我明白为什么会这样,但我不知道如何使它顺利和一致.

任何帮助表示赞赏.

android android-canvas android-view

3
推荐指数
1
解决办法
3947
查看次数

在画布上绘制透明文本

我试图在画布上写一个半透明的文本.我看到画布上写的字符串,但透明度似乎不起作用.这是我的代码:

     public void onDraw(Canvas canvas, Paint paint) {
    paint.setAlpha(1);
    paint.setAntiAlias(true);
    paint.setTextSize(this.textSize);
    paint.setColor(textColor);
    canvas.drawText(text,x,y,paint); 
    Logs.add("onDraw DefaultScoreGottenText currentAlpha = " + this.currentAlpha);
    showAnimation(null);
}
Run Code Online (Sandbox Code Playgroud)

alpha属性已设置但似乎没有任何效果.我甚至尝试创建一个新的Paint对象并将其发送到drawText方法.也没用.有任何想法吗 ?

android transparent draw android-canvas

3
推荐指数
1
解决办法
4320
查看次数

在画布上绘制文本

我正在尝试使用画布绘制文本.我到处检查过,但这些例子相当复杂,我可以在画布上绘制文字,但它不像这张照片那样显示.

在此输入图像描述

我发现这个代码并且它正常工作,我只需要像上面的图像一样写.

        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        paint.setTextSize(30);
        paint.setAntiAlias(true);

        canvas.drawText("There are 137 days, 9 hours 4 minutes and 36 seconds", 150,150, paint);
Run Code Online (Sandbox Code Playgroud)

animation android draw android-canvas

3
推荐指数
1
解决办法
2096
查看次数

Android Canvas到Bitmap

我一直在网上搜索如何将画布上的内容转换为位图.我尝试了多种方法来实现这一点,例如将绘图缓存保存到位图,但最终结果是背景位图闪烁了一会儿,然后变成了黑屏.测试图像显示在背景上,但不会被下次调用的背景覆盖OnDraw.

MainThreading{

                        ...

              if(notuptodate == true){

                        //call readyBackground to create the background bitmap
                        this.mainPanel.readyBackground(canvas);
                        //post the canvas
                        surfaceHolder.unlockCanvasAndPost(canvas);
                        //clean the Canvas
                        canvas = null;
                        //ready new Canvas
                        canvas = this.surfaceHolder.lockCanvas();//lock the canvas to enable editing






                    }//if not true

                    if (MainThreading.notuptodate == false){

                        mainPanel.onDraw(canvas);


                    }//if false
...
                 }//mainthreading

    //this method is run first to create the Bitmap that on draw will use
    public void readyBackGround(Canvas canvas){


        if (MainThreading.notuptodate){
            //method used to draw multiple Bitmaps onto the canvas
            renderBackground(canvas);

            //private …
Run Code Online (Sandbox Code Playgroud)

android bitmap android-canvas

3
推荐指数
1
解决办法
9760
查看次数

在图像android中画一个文本

我必须在地图视图上放置标记并在标记上写一个数字.我已经这样做了,但文本对齐方式因不同分辨率而异.下面是参考代码

        float xVal = (float) curScreenCoords.x;  // Point curScreenCoords
        float yVal = (float) curScreenCoords.y-20; // Point curScreenCoords
        Bitmap bitmap = BitmapFactory.decodeResource ( context.getResources() , ( R.drawable.pin_number ) ) ;
        canvas.drawBitmap(bitmap, xVal, yVal, getInnerPaint()); 

        public Paint getInnerPaint() {
         if (innerPaint == null) {
             innerPaint = new Paint();
         }
        innerPaint.setARGB(255, 117, 161, 220); // blue
        innerPaint.setAntiAlias(true);  
        innerPaint.setStyle(Style.FILL);
        return innerPaint;
        }
        canvas.drawText(String.valueOf(10), xVal+20, yVal+22, getCountPaint()); // 10 is just for example, it can vary to one digit to two to three 
        public Paint …
Run Code Online (Sandbox Code Playgroud)

android draw android-canvas

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

如何在画布中绘制时调整位图大小?

在我的Android应用程序中,我有这个函数,通过画布从旧的位图创建一个新的位图.

private static Bitmap convert(Bitmap bitmap, Bitmap.Config config, int width, int height) {
    Bitmap convertedBitmap = Bitmap.createBitmap(width, height, config);
    Canvas canvas = new Canvas(convertedBitmap);
    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    canvas.drawBitmap(bitmap, 0, 0, paint);
    bitmap.recycle();
    return convertedBitmap;
}
Run Code Online (Sandbox Code Playgroud)

问题是当我将旧位图绘制到画布上时,由于旧位图的尺寸大于画布,因此只有位图的左上部分会在画布上绘制.有没有一种方法可以让它在画布上绘制位图时,它会缩放位图,使其完全适合画布?

我不想使用调整位图的大小createScaledBitmap.有更快的方法吗?

或者我可以做,createScaledBitmap但同时让它变得可变吗?这就是我想要做的整体,调整大小并使其同时变得可变.

谢谢

android bitmap android-canvas

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

我们可以绘制一个使用Path对象的圆圈吗?[在参数中,如drawPath()]

我输入了一个使用Canvas的程序.

它提供了一个弹出菜单,提供3个绘图工具作为选项:

  1. 划伤屏幕时画线

  2. 根据屏幕上的起点和终点绘制线条

  3. 画一个圆圈

此外,还有以下选项:

  1. 明确

  2. 解开

在线上执行撤消时,根本不存在任何问题,因为两者都基于路径.(用途List<Path>).但是这里开始出现问题.使用Point对象绘制圆.所以问题是:

  1. 我不能让Android区分 - 绘制线条和圆圈的顺序.例如:我绘制5行,然后是5个圆(或者).目前没有任何情报可以遵循他们的绘画顺序.因此,用线条和圆圈一起取消画布会导致混乱.
  2. 当前代码(尚未深入调试)需要2次点击才能撤消一个圆而不是1.

我希望我很清楚.[Downvoters,如果被吸引,被要求输入原因,以指导这个初学者,一个通常的downvotes受害者,不知道改进的确切原因].

下面分享的代码(很复杂).我尝试将一个类专门用于每个绘图工具(直线,圆) - 它工作 - 除了 - 它没有在画布上绘制任何东西.所以,所有人都回来了.

码:

 package com.example.orbit_.undofortouch;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.Toast;


import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {

    Button b1, b2, b3;
    PopupMenu …
Run Code Online (Sandbox Code Playgroud)

graphics android undo android-canvas android-drawable

3
推荐指数
1
解决办法
5952
查看次数