标签: android-canvas

如何在Android上正确扩展游戏

为了简单起见,我们假设我正在为Android制作一个简单的Pong克隆游戏.让我们假设它只能在横向模式下播放.(现在忽略方形手机).

我希望游戏能够在每部手机上以相同的比例显示,如果您在QVGA手机上截取游戏截图,并将屏幕截图重新调整为WVGA尺寸,它看起来几乎与游戏相同看看WVGA手机.换句话说,桨的宽度应始终为屏幕宽度的1/32,球的直径应始终为屏幕宽度的1/16.

绘制应用程序的正确方法是什么?它将在标准的SurfaceView中运行,并将其绘制到Canvas.

假设我有一个高分辨率的PNG用于球拍,球和游戏字体(记分牌,主菜单).

我是否找到物理分辨率,然后缩放Canvas通道scale(float sx, float sy)以使我的所有画布(在QVGA和WVGA上)具有相同的虚拟分辨率,然后在每个屏幕尺寸的每个位置上绘制完全相同的图元?

或者我可以在画布中以某种方式使用与密度无关的像素(倾角)吗?

android resolution android-canvas

9
推荐指数
1
解决办法
6004
查看次数

Canvas动态更改位图的z-index

我正在创建一个Android应用程序,在我的应用程序中,我有一个画布,我通过canvas.drawBitmap()函数绘制了大量的位图到画布.根据我的理解,这些位图上的z-index是根据它们绘制到画布的顺序设置的.我想弄清楚的是在绘制这些位图之后,如果我可以动态更改位图上的z-index以将其推到顶部?这似乎是一个非常简单的问题,但我还没有找到解决方案的运气.

android z-index bitmap android-canvas

9
推荐指数
1
解决办法
3402
查看次数

如何画一个透明的圆圈?

我想画一个透明的圆圈,但它不起作用.

当我绘制位图时,它可以工作,但圆圈不会变得透明.

这是我的简短代码:

Paint paint = new Paint();
paint.setAlpha(125);
canvas.drawBitmap(bitmap, sourceRect, destRect, paint);  // this works fine

canvas.drawCircle(x, y, radius, paint);   // the circle is drawn but not transparent
Run Code Online (Sandbox Code Playgroud)

android android-canvas

9
推荐指数
1
解决办法
6626
查看次数

如何在android中为paint创建这种类型的画笔

可能重复如何在android中为画布制作自定义画笔?

你好朋友,

我太坚持为绘画应用创建这种类型的画笔,但没有找到任何与此相关的内容.

我是绘画/画布的新手,所以我对基本已经完成没有这方面的知识但是对于像创建画笔这样的效果我没有像创建/实现它那样的东西.有没有人有这样的例子或代码?

我需要这种类型的刷子用于我的应用简单的一个例子需要理解:

在此输入图像描述

谢谢.

android brush paint android-canvas

9
推荐指数
1
解决办法
5656
查看次数

在Android中歪曲文本视图

我想在我的应用程序中复制以下内容:

在此输入图像描述

如您所见,它基本上是一个按钮,用于增加/减少其中包含的文本视图的值.此按钮将具有三种视觉状态 - >未按下,减少和增加(如上图所示,用户点击增加箭头,按钮显示在该侧按下)

这是我目前的3个按钮状态:

在此输入图像描述 在此输入图像描述 在此输入图像描述

正如您所看到的,我遇到的问题是能够正确地倾斜/旋转文本视图,使其看起来视觉上正确,并且当按钮增加或减少时,它与按钮一起倾斜.

到目前为止,我尝试了两种不同的方法:

  • 创建一个自定义文本视图类,该类重写onDraw()倾斜画布的方法:

    @Override
    public void onDraw(Canvas canvas) { 
       canvas.save(); 
    
       canvas.skew(0.2f, 0f);
    
       super.onDraw(canvas); 
       canvas.restore();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 集成Rotate3dAnimation(源于此处)并使用许多不同的变体来获得所需的结果,例如:

       Rotate3dAnimation skew = new Rotate3dAnimation(
              30, 0, centerX, centerY, 0, false);
       txtAmount.startAnimation(skew); 
    
    Run Code Online (Sandbox Code Playgroud)

不幸的是,我没有得到完全反映上面第一张图片的结果.我对使用Z轴,倾斜,旋转等设置值感到困惑.

我非常感谢任何有这方面经验的人的帮助.提前致谢

android android-widget android-animation android-canvas

9
推荐指数
1
解决办法
3875
查看次数

使用canvas.scale函数放大画布?

我已经实现了一个onDraw绘制一组矩形的long 方法.矩形太小,我希望它们看起来更大.但不幸的是我无法更改矩形坐标,因为它们存储在数据库中.那么有什么方法可以放大画布使用canvas.scale()

android zoom scale android-canvas

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

从自定义SurfaceView获取位图

我在扩展表面视图和实现runnable的类中有这个代码我能够使用该类基本上允许您使用不同的颜色等绘制到画布.我正在尝试获得一种方法,允许我在绘制图像后保存图像,这是方法.无论我做什么,我只是得到一个没有任何内容的黑色图像.有任何想法吗?

我启用了缓存绘图

目标从自定义SurfaceView获取位图图像我已经用尽了在这里查看其他帖子的选项,但没有找到任何可行的工作.这里希望最近有一个新的解决方案.非常感谢

public Bitmap getImage() {
            Bitmap bitmap = Bitmap.createBitmap(this.getWidth(),
                    this.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(bitmap);
            this.draw(canvas);
            return bitmap;
        }
Run Code Online (Sandbox Code Playgroud)

android extends bitmap surfaceview android-canvas

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

bitmapshader和canvas.scaling android

有没有人对以下问题有提示或解释?我画了一个带有位图的路径.当画布没有缩放时,它看起来不错(第一张图片).当我缩放(放大)时,位图处理器不会被缩放并且看起来非常难看.我在放大后尝试了几个重新创建bitmapshader的东西,但没有成功:-(.有人有提示吗?

没有缩放它看起来不错:

在此输入图像描述

缩放它看起来很难看:

在此输入图像描述

代码:

    canvas.scale(scalex, scaley);
    canvas.translate(itranslatex, itranslatey);


    fillBMP = makePatternCross(fscalex, 1, Color.GREEN/*,fscalex,fscaley*/);
    fillBMPshader = new BitmapShader(fillBMP, BitmapShader.TileMode.REPEAT, BitmapShader.TileMode.REPEAT);
    paintshader = new Paint();
    paintshader.setShader(fillBMPshader);   


    canvas.drawPath(cpath.path, paintshader);



private static Bitmap makePatternCross(float fSize, float fStrokewith,int iColor) {
    Log.v("Create Patter makePatternCross","makePatternCross");

    float fBitmapSizeOrig = 10;
    fBitmapSizeOrig=fBitmapSizeOrig*fSize;
    Bitmap bm = Bitmap.createBitmap((int)fBitmapSizeOrig,(int) fBitmapSizeOrig,Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(bm);
    //c.scale(200, 200);
    c.drawColor(Color.WHITE);
    Paint p = new Paint();
    p.setColor(iColor);
    //p.setStrokeWidth(iStrokewith);
    p.setStrokeWidth(fStrokewith/fSize);
    p.setStrokeWidth((float) 0.000001);
    c.drawLine(0, 0, fBitmapSizeOrig, fBitmapSizeOrig, p);
    c.drawLine(0, fBitmapSizeOrig, fBitmapSizeOrig, 0, p);

    if (fSize != 1) …
Run Code Online (Sandbox Code Playgroud)

android paint bitmap android-canvas

9
推荐指数
1
解决办法
3789
查看次数

画一个边缘光滑的圆圈

我正在使用canvas我的应用程序,我需要画一个圆圈.
为此,我使用了canvas类的drawCicle(cx,cy,radious,paint)方法.
问题是圆的边缘呈像素化.它的椭圆形的kinf.

这是我的代码:

public void drawCircle(){       
    Paint paint = new Paint();
    paint.setColor(Color.rgb(52, 73, 94));
    canvas.drawCircle(200, 300, 33, paint);     
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

android android-canvas

9
推荐指数
1
解决办法
4528
查看次数

编辑:Android绘制针图像到这个圆圈类似米仪表

到目前为止,我能够使用一些代码引用表stackoverflow绘制半圆.现在我想把针扎到这个半圆圈.我不知道如何做到这一点.这是Semi circle代码

    package in.ashish29agre.stackoverflow.sample.semicircle;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.view.View;

public class MyGraphView extends View {
    private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    private float[] value_degree;
    private int[] COLORS = { Color.GREEN, Color.RED,  Color.GREEN, Color.RED };
    // size of bigger half circle
    RectF rectf = null;
    // size of smaller half circle
//    RectF rectf2 = new RectF(45, 45, 275, 275);
    // size of the smallest half circle
//    RectF rectf3 = new …
Run Code Online (Sandbox Code Playgroud)

android android-custom-view android-canvas

9
推荐指数
1
解决办法
2110
查看次数