当前位置: 首页 > 知识库问答 >
问题:

Android canvas未使用其他方法在位图上绘制

司空实
2023-03-14

我使用canvas在位图上绘制,并将位图覆盖在imageView上。

我已经画了一个基本的绘图在方法中被称为DrawGraph(),当用户触摸画布我必须画一个圆圈,因为我已经使用画布在onTouchEvent()方法,它没有画任何东西,代码是下面给出的,什么是问题,我如何解决这个问题。

我还尝试创建另一个位图,上面有一条直线,将新位图设置为在绘图()末尾的图像视图,并检查点击()。它显示新的位图(画了一条直线)在开始时正确设置为图像视图,但是当单击图像视图时,一个空白位图(没有画一条直线)设置为图像视图。所以我确信画布绘制在检查点击()中不起作用。

谢谢你提前帮我!

ImageView imageView;

Paint p = new Paint();
Bitmap myBitmap;
Bitmap workingBitmap;
Bitmap mutableBitmap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img_drawpanel);
    workingBitmap = Bitmap.createBitmap(myBitmap);
    mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true);

    imageView = (ImageView) findViewById(R.id.image1);

    imageView.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            int touchX = (int) (event.getX() + imageView.getX());
            int touchY = (int) (event.getY() + imageView.getY());

            checkClicked(touchX, touchY);

            return true;
        }
    });

    drawGraph();
}

public void drawGraph(){

    p.setAntiAlias(true);
    p.setColor(Color.BLACK);
    p.setStyle(Style.FILL_AND_STROKE);
    p.setStrokeWidth(5);

    Canvas canvas = new Canvas(mutableBitmap);

    //basic drawing is successfully drawn here

    imageView.setAdjustViewBounds(true);
    imageView.setImageBitmap(mutableBitmap);

}

public void checkClicked(int x, int y){

    p.setAntiAlias(true);
    p.setColor(Color.RED);
    p.setStyle(Style.FILL_AND_STROKE);

    Canvas canvas = new Canvas(mutableBitmap);

    //canvas doesn't draw a circle here
    canvas.drawCircle(x, y, 10, p);

    imageView.setAdjustViewBounds(true);
    imageView.setImageBitmap(mutableBitmap);

共有1个答案

饶德本
2023-03-14

正在绘制,但绘制位置错误。因为视图中的坐标与位图中的坐标不同。

您可以通过从imageView开始触摸并将手指向屏幕左上角拖动来进行验证。

在绘图之前,您需要获取屏幕的比例和平移以及图像视图并转换坐标。

您可以使用ImageView.getImageMatrix()来获取包含图像转换的ImageView的绘图矩阵,并相应地进行数学运算。

 类似资料:
  • 我现在正在做一个游戏,遇到了一些我想不出来的事情。我有一系列的ImageButton,我正在迭代,并在每个按钮上绘制位图。位图本身绘制得很好,但是我也想在这些位图上绘制矩形。 相关代码(如果这还不够,我可以发布更多): 位图本身出现在按钮上,但是我想要绘制的矩形没有被绘制。

  • 问题内容: 如果我有两个类,而其中一个有一个要在其他类中使用的函数,那么该使用什么,这样就不必重写我的函数了? 问题答案: 有两种选择: 在您的类中实例化一个对象,然后在其上调用所需的方法 使用@classmethod将函数转换为类方法 例: 或使用继承(如果适用):

  • 以下是MyBitmapUtils.GetBitmapScaledToFitWidth: 我知道这是怎么发生的。这是因为图像的高度大于2048,而在Android系统中创建一个大于2048*2048的位图会导致OOM(奇怪的是,我的logcat没有报告这个错误)

  • 本文向大家介绍C# GDI在控件上绘图的方法,包括了C# GDI在控件上绘图的方法的使用技巧和注意事项,需要的朋友参考一下 本文以在chart控件上和窗体上画矩形为例子讲述了C# GDI在控件上绘图的方法。分享给大家供大家参考。具体方法如下: 具体的实现方法就不多解释了,备注很详细,代码也很简单。 主要功能代码如下: 希望本文所述对大家的C#程序设计有所帮助

  • 其他认证方法 还有两种其他身份验证方法值得一提。它们是一次性密码和证书。 一次性密码 FreeRADIUS包含一个名为rlm_otp的模块,可用于处理OTP(一次性密码)令牌。该模块应与其他程序一起使用。 不幸的是,为其他程序提供代码的公司Tri-D Systems已经不存在了。但是,代码是分叉的,现在可以从Google Code(http://code.google.com/p/otpd/)获得

  • 我有一个“长”格式的数据框,它包含两列:第一列值,第二列性别[Male-1/Female-2]。我编写了一些代码来制作整个数据集的直方图(下面的代码)。 但是,我还想在直方图上添加一个密度,以强调性别之间的差异,即我想组合3个图:整个数据集的直方图,以及每个性别的2个密度图。我尝试使用一些示例(一、二、三、四),但仍然不起作用。“密度”代码仅起作用,而“历史密度”的组合不起作用。 P. S.一些例