标签: android-canvas

如何让android画布每5秒重新绘制一次

我正在制作一个需要动态动画的应用程序。(玩家动作)我正在使用该Canvas对象来执行此操作。我的第一个问题是“Canvas真的是处理这些动画的最佳方法吗?”,我的第二个问题是“如何将玩家重新绘制到Canvas?” 这是我的代码:

theGame.java:

package birdprograms.freezetag;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;

public class theGame extends Activity {
    players[] arr = {
            new player(),
            new player(),
            new player(),
            new player()
    };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new myView(this));
    }
    public class myView extends View {
        Paint paint = new Paint();
        public myView(Context context) {
            super(context);
            paint.setColor(Color.YELLOW);
        }
        @Override
        public void onDraw(final Canvas canvas) {
            arr[0].update(true, …
Run Code Online (Sandbox Code Playgroud)

java android android-canvas

4
推荐指数
1
解决办法
6799
查看次数

如何绘制带圆角的路径

我应该像这个镜头一样绘制一个 CustomView。在此输入图像描述

但它们并不相同。角的笔划不同。

我使用 2 个分隔线Path来绘制顶部形状:第一个用于黄色背景:

   private val paint = Paint().apply {
        isAntiAlias = false                    // pass true does not make change
        color = Color.YELLOW
        style = Paint.Style.FILL_AND_STROKE    // pass only FILL does not make change
        }
Run Code Online (Sandbox Code Playgroud)

第二个是:

private val strokePaint = Paint().apply {
        isAntiAlias = false                   // pass true does not make change
        color = Color.BLACK
        strokeWidth = 2.toPx().toFloat()
        style = Paint.Style.STROKE
    }
Run Code Online (Sandbox Code Playgroud)

onDraw()函数中我用它们来绘制:

override fun onDraw(canvas: Canvas) {
        drawPath()

        canvas.drawPath(path, paint)
        canvas.drawPath(path, strokePaint)

        // …
Run Code Online (Sandbox Code Playgroud)

android custom-view android-custom-view android-canvas

4
推荐指数
2
解决办法
7979
查看次数

Jetpack Compose 中画布的重组

我正在使用 Jetpack Compose 来实现绘制“逐渐增长的线”的要求,即从指定的起点和点开始并逐渐“增长”直到到达指定的终点的线。我之前用自定义视图实现了这个,效果很好。我的逻辑要求根据某些条件一次又一次地重新调用“onDraw()”。为此,我在使用自定义视图时使用了“invalidate()”。但现在我正在使用 Jetpack Compose,无法找到重新组合“Canvas”的方法。

这是我的 Jetpack 为“逐渐增长的线”编写的代码:

   @Composable
        fun SplashUI() {
            var test = remember { mutableStateOf(0) }
                Canvas(modifier = Modifier.fillMaxSize()) {
                    //  starting point
                    x1 = 0.0;
                    y1 = size.height / 2.0;

                    //  ending point
                    x2 = size.width.toDouble()
                    y2 = size.height / 2.0;

                    divideLineIntoEqualParts();

                    if (test.value < listOfPoints.size) {
                        drawLine(
                            Color.Black,
                            Offset(
                                listOfPoints.get(0)?.x!!,
                                listOfPoints.get(0)?.y!!
                            ),
                            Offset(
                                listOfPoints.get(inte)?.x!!,
                                listOfPoints.get(inte)?.y!!
                            ),
                            strokeWidth = 5f
                        );
                    }
                    test.value = test.value + 1 //This doesn't trigger recomposition of canvas
                    //Recomposition of …
Run Code Online (Sandbox Code Playgroud)

android android-canvas android-jetpack-compose android-jetpack-compose-canvas

4
推荐指数
1
解决办法
6300
查看次数

drawCircle vs drawBitmap

我打算在我的游戏中实现一组新的数字:简单的圆圈.绘制的精灵(在这种情况下为圆圈)的数量从2-3开始,并且可以无限地(可能)上升.最大值可能在60左右.总共将有5种类型的圆圈,每种圆圈都有不同的颜色,也可能是大小.现在看到我将不会实现它,直到星期一,我以为我会在stackoverflow问它.

有人知道哪种方法更快吗?

java geometry android draw android-canvas

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

如何使用视图扩展类的canvas进入活动类?

我创建了一个类:

public class TestCanvas extends View {

    public TestCanvas(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setColor(Color.RED);

        canvas.drawText("kal", 0, 100, paint);
        canvas.save();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我从活动中调用该类:

public class TestActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TestCanvas tcanvas=new TestCanvas();

        frameLayout=(FrameLayout)findViewById(R.id.frameLayout1);
        frameLayout.addView(tcanvas);   
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想将canvas插入活动类并设置为ImageView.我该怎么做?

android android-canvas

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

用于实时制图的Android路径

我正在尝试在android中创建一个实时图表实用程序,并且在大多数情况下它可以工作,除了当我在其中一个路径中获得太多数据点时它会破坏openGL.我正在使用路径,因为当传入的值超出图形的当前边界时,我正在通过矩阵转换整个数据集.我是以错误的方式来做这件事的吗?是否有更好/更合适的API用于此类事情?如果可能/我知道怎么做,我会很高兴修剪当前界限的路径.谢谢!

onDraw有:

  @Override
  protected void onDraw(Canvas canvas) {
    scaleX = getWidth()  / (maxX - minX);
    scaleY = getHeight() / (maxY - minY);
    // TODO: Use clips to draw x/y axis, allow color to be defined in attributes, etc.
    canvas.drawColor(0xFF000000);
    for (DataLine line : mPathList.values()) {
      canvas.drawPath(line, line.getPaint());
    }
  }
Run Code Online (Sandbox Code Playgroud)

(DataLine是Path的子类,包含Paint对象)

有问题的错误是来自OpenGLRenderer的警告:"形状路径太大而无法渲染到纹理中"

charts android android-canvas

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

如何清除Android中的画布上的绘图

我已经为绘图设置了画布.我现在的问题是如何清除图纸.

试过这样做无济于事.

public void clear()
{
    circlePath.reset();
    mPath.reset();
    // Calls the onDraw() method
    //invalidate();
}
Run Code Online (Sandbox Code Playgroud)

请在这里查看整个代码:

https://gist.github.com/akosijiji/a29cca90bead2e5e35ad

真的很感激任何帮助.

java android android-canvas

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

如何在按钮单击时清除android中的画布

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.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class SingleTouchEventView extends View {
 private Paint paint = new Paint();
 private Path path = new Path();
 public boolean cc = false;

 public SingleTouchEventView(Context context, AttributeSet attrs) {
  super(context, attrs);

  paint.setAntiAlias(true);
  paint.setStrokeWidth(18f);
  paint.setColor(Color.LTGRAY);
  paint.setStyle(Paint.Style.STROKE);
  paint.setStrokeJoin(Paint.Join.ROUND);
  paint.setStrokeCap(Paint.Cap.ROUND);
}

@Override
protected void onDraw(Canvas canvas) {
    if(cc)
    {
        Bitmap back = BitmapFactory.decodeResource(getResources(), R.drawable.black_square);
        Bitmap cb = Bitmap.createScaledBitmap(back, 0, 0, false);
        canvas.drawBitmap(cb,0,0,null);
        cc …
Run Code Online (Sandbox Code Playgroud)

android android-canvas

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

Android剪辑canvas.drawBitmap

我是Android新手,我有两个图像,一个是空图像,另一个是表示进度条的完整图像.

有些人可以向我解释我如何只使用canvas.drawBitmap绘制完整图像的百分比.

我不希望每次都调整位图图像的大小.

谢谢

乔纳森

android android-canvas

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

如何用颜色填充画布

我想填充画布里面的颜色,这是我的代码:

Bitmap bitMap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
bitMap = bitMap.copy(bitMap.getConfig(), true);
Canvas canvas = new Canvas(bitMap);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(4.5f);
canvas.drawCircle(50, 50, 30, paint);
Run Code Online (Sandbox Code Playgroud)

此代码生成带有边框颜色的圆.如何用颜色填充圆圈?

android android-canvas

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