标签: android-canvas

如何用多个手指在画布上绘图

我正在使用Canvas创建绘图应用程序的 android 类。这是我第一次尝试使用 Canvas 类。到目前为止,我使用的代码工作正常,绘图工作正常。但我在这段代码中意识到,它允许用户仅用一根手指进行绘画,我的意思是说,如果用户使用多于一根手指在画布上绘画,则不允许用户用多根手指进行绘画。我浏览了有关多个触摸事件的文档,但未能在我的代码中实现它。那么有人可以帮我解决这个问题吗?

我用于在画布上绘图的代码:

public class DrawView extends View implements OnTouchListener 
{
    private Canvas      m_Canvas;
    
    private Path        m_Path;
    
    private Paint       m_Paint;
    
    ArrayList<Pair<Path, Paint>> arrayListPaths = new ArrayList<Pair<Path, Paint>>();
    
    ArrayList<Pair<Path, Paint>> undonePaths = new ArrayList<Pair<Path, Paint>>(); 
    
    private float mX, mY;
    
    private Bitmap bitmapToCanvas;
    
    private static final float TOUCH_TOLERANCE = 4;
        
    public DrawView(Context context) 
    {
        super(context);
        setFocusable(true);
        setFocusableInTouchMode(true);      
        this.setOnTouchListener(this);
        
        onCanvasInitialization();
    }      
    
    public void onCanvasInitialization()
    {
        m_Paint = new Paint();
        m_Paint.setAntiAlias(true);
        m_Paint.setDither(true);
        m_Paint.setColor(Color.parseColor("#37A1D1"));
        m_Paint.setStyle(Paint.Style.STROKE);
        m_Paint.setStrokeJoin(Paint.Join.ROUND);
        m_Paint.setStrokeCap(Paint.Cap.ROUND);
        m_Paint.setStrokeWidth(2);      
                
        m_Path = …
Run Code Online (Sandbox Code Playgroud)

android multi-touch android-canvas

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

位图 - 矩阵操作(缩放、旋转和平移)

我需要一些矩阵运算方面的帮助。我想要实现的是:

  • 缩小
  • 移动到特定位置
  • 旋转一定角度(位于位图的中心)

我的代码目前如下所示:

            Matrix matrix = new Matrix();
            matrix.preRotate(mShip.getRotation(), mShip.getX() + mShip.getCurrentBitmap().getWidth()/2f, mShip.getY()  + mShip.getCurrentBitmap().getHeight()/2f);
            matrix.setScale((1.0f * mShip.getWidth() / mShip.getCurrentBitmap().getWidth()), (1.0f * mShip.getHeight() / mShip.getCurrentBitmap().getHeight()));
            matrix.postTranslate(mShip.getX(), mShip.getY());
            mCanvas.drawBitmap(mShip.getCurrentBitmap(), matrix, mBasicPaint);
Run Code Online (Sandbox Code Playgroud)

但是旋转的中心错误,我不知道如何解决这个问题 - 我已经环顾四周,但只发现了类似的问题,没有解决方案。我认为我可能必须将其中一个操作应用于另一个操作的值,因为它们是按顺序执行的,但我不知道如何操作。

android matrix android-canvas

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

多线程更新表面视图画布

从事咨询项目。最后一分钟的要求是球在屏幕上弹跳(不要问为什么......叹息

不管怎样......这些球是按值分组的。10 个红球价值 100 分。5 个球为蓝色,价值 50 分。5 个绿色球价值 25 分。5 个球为黄色,得 10 分。

在此背景下,我采取的方法是扩展 SurfaceView 并定义 5 个线程,每个线程管理一组特定的球。

每个线程从 SurfaceView 接收相同的 SurfaceHolder。

我选择多线程而不是单线程的原因是管理屏幕上所有球的性能并不是最好的。

OpenGL 目前还不是一个真正的选择。

这是线程类之一的示例。当线程运行时,它会创建一定数量的球。每个球都是随机创建并添加到列表中的。

public class hundred_balls_thread extends base_balls_thread {
    public hundred_balls_thread(SurfaceHolder holder, Context ctext, int radius) {
        super(holder, ctext, radius);
    }

    @Override
    public void run() {
        int x, y, radius;

        while (Calorie_balls.size() <= 21) {

            x = 100 + (int) (Math.random() * (mCanvasWidth - 200));
            y = 100 + (int) (Math.random() * (mCanvasHeight) - …
Run Code Online (Sandbox Code Playgroud)

java multithreading android surfaceview android-canvas

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

Jetpack 中的波浪框组成

有没有办法用Canvas制作一个顶部有波浪形的盒子?

我想知道这个效果是否可以直接用Canvas来实现,不需要有滚动动画。

在此输入图像描述

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

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

如何在Google地图上删除图钉以及如何在Google地图上的对话框中获取当前地址?

我正在开发一个与Google地图相关的应用程序.我是谷歌地图的初学者.

我想做一个在我当前位置显示Pin的应用程序.当我点击该引脚时,它会显示包含我当前地址的对话框."Pin是可移动的".当我在Google地图上将图钉从一个位置移动到另一个位置时,对话框会显示该位置的地址.

所以请给我想法或参考网站.

android android-maps mylocationoverlay android-canvas

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

为什么图像上的油漆会变慢?

在我的Android绘图应用程序中,我将在画布上绘画.但有些时候我在画之前就有了Image.那时我的油漆变慢了.问题出在哪儿 ??

仅在Canvas上绘制的代码:

@Override
    protected void onDraw(Canvas canvas) {

        //canvas.drawColor(0, PorterDuff.Mode.CLEAR);
        // set the Canvas Color
        canvas.drawColor(canvasColor); // edited

        canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 

        canvas.drawPath(mPath, mPaint);

    }
Run Code Online (Sandbox Code Playgroud)

将图像作为背景的代码是:

 @Override
    protected void onDraw(Canvas canvas) {

        //canvas.drawColor(0, PorterDuff.Mode.CLEAR);
        // set the Canvas Color
        canvas.drawColor(canvasColor); // edited

        if(!(imagePath==null))
        {
            Bitmap tempBitmap = BitmapFactory.decodeFile(imagePath); // from the gallery
            photoBitmap = Bitmap.createScaledBitmap(tempBitmap, display.getWidth(), display.getHeight(), true);
        }
        if(!(imagePath==null))
        {
            canvas.drawBitmap (photoBitmap,0,  0, null);
        }


        canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 
     canvas.drawPath(mPath, mPaint);

    }
Run Code Online (Sandbox Code Playgroud)

现在我不知道为什么我的油漆变得很慢,而我在画布上画画,如果有图像作为背景.请帮帮我.谢谢.

android paint android-layout android-canvas

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

硬件加速画布

我目前正在制作一个密集的LiveWallpaper,它绘制到画布上.我发生了以下视频:http://www.youtube.com/watch?v = v9S5EO7CLjo.

但是,当我尝试实现硬件加速时,我遇到了错误.这是我的代码:

if (c != null && mStaticRects.length > 10 && c.isHardwareAccelerated())
                    drawSurfacePortrait(c);

if (c != null && mStaticRects.length < 20 && c.isHardwareAccelerated())
                    drawSurfaceLandscape(c);
Run Code Online (Sandbox Code Playgroud)

当我运行它时,这是相应的错误:

AndroidRuntime(382): java.lang.NoSuchMethodError: android.graphics.Canvas.isHardwareAccelerated
Run Code Online (Sandbox Code Playgroud)

最后这是我的清单......

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="stuff.of.mine"
    android:versionCode="1"
    android:versionName="1.0" >

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />

<uses-permission android:name="android.permission.VIBRATE" ></uses-permission>


<uses-feature
    android:name="android.software.live_wallpaper"
    android:required="true" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" 
    ***android:hardwareAccelerated="true"***>
    <service
        android:name=".SomeWPService"
        android:permission="android.permission.BIND_WALLPAPER" 
        ***android:hardwareAccelerated="true"***>
        <intent-filter>
            <action android:name="android.service.wallpaper.WallpaperService" />
        </intent-filter>

        <meta-data
            android:name="android.service.wallpaper"
            android:resource="@xml/mylwp" />
    </service>

</application>
Run Code Online (Sandbox Code Playgroud)

hardware android android-canvas

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

在两个视图之间用手指画线(ImageViews)

我在SO上使用了(看过)很多例子,我需要的是在布局上的两个图像视图之间绘制一条线:

在此输入图像描述

我看到的所有示例或示例,只是使用视图扩展类,并将该类设置为ContentView As,

public class DrawView extends View {
Paint paint = new Paint();

public DrawView(Context context) {
    super(context);
    paint.setColor(Color.BLACK);
}

@Override
public void onDraw(Canvas canvas) {
        canvas.drawLine(0, 50, 350, 50, paint);
}

}
Run Code Online (Sandbox Code Playgroud)

和,...

 @Override
public void onCreate(final Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    DrawView drawView = new DrawView(this);
    setContentView(drawView);
}
Run Code Online (Sandbox Code Playgroud)

实际上,这是一个很好的方法但是如何将这些图像添加到画布(或)如何加载我的布局(XML文件)以在它们之间绘制线条.

任何类型的小推动也对我的工作有很大的帮助.谢谢.

android line ontouchlistener ondraw android-canvas

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

Android:如何绘制二维渐变

我想用Android来绘制这样的渐变Canvas:

在此输入图像描述

在水平方向上有两种颜色(红色和蓝色)的渐变.然后在垂直方向上有一个透明度梯度(允许红色和蓝色显示)为空(没有所有颜色?).

我在这里发现了这个链接,这与我想要的很接近.但我无法弄清楚如何使底部透明.

如何在Android中实现这一目标?

android linear-gradients android-canvas

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

Android Canvas改变形状和文本交集的颜色

我正在尝试使用Canvas更改形状和文本交叉的颜色. 正如您在图像中看到的那样我有2种形状和1种不同颜色的文字.

这没有任何PorterDuffXfermode,并且PorterDuffColorFilter模式添加到任何油漆.我希望交叉的形状是特定的颜色,例如白色,文本红色或白色,如下图所示.

在我的例子中,文本位于底部,圆圈中间和矩形上方,但它是无关紧要的,我只是想弄清楚它是如何工作的,以及如何将交叉点设置为特定的颜色.

正如您在此图片中看到的那样图片背景是黑色,圆圈是白色,文字是黑色.当圆圈重叠时,圆圈的交点变为黑色,文本的重叠部分变为白色.

我可以实现这个目标

canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT));
Run Code Online (Sandbox Code Playgroud)

如果圆形和矩形都是白色而背景是黑色.当我将背景颜色更改为任何其他颜色时,文本不可见,形状为黑色.

我也想知道如何在这张图片中得到类似的结果在图像上 可以将圆形,矩形和文本的重叠部分设置为特定颜色吗?

android android-canvas

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