android - canvas.drawPoint 不适用于 4.4 或 5.0

标签 android canvas

几个月前我就一直面临这个问题,我找不到任何相关信息。

我有一个带有函数 canvas.drawPoint 的应用程序,它从不在 android 4.4 或 5.0 或更高版本中绘制任何东西。

但它从 2.3 到 4.2 都完美运行,我实际上测试了不同的真实设备。

虚拟设备也是如此。

问题仅出在点上,因为使用 canvas.drawRect 或 canvas.drawLine 绘制矩形或线条即使在同一个应用程序中也能完美工作。

例子:

canvas.drawRect(0, 0, 400, 400, paint); // working for all devices
for (int ii=0;ii<500+1;ii++) 
        {
            for (int jj=0;jj<500+1;jj++)
            {  canvas.drawPoint(ii, jj, paint);  //not working for higher than 4.4 android version
                } }

这将绘制第一个 400*400 的矩形,但不会绘制第二个 500*500 系列的点。

对于我的实际应用程序,它使用了 2 个类,实际上我删除了一些计算和 oncliklistners 只是为了使其简单但不起作用。

绘图 View .java

package com.example.hazim.myapplication;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class DrawView extends View {
    int pr=150;int pry=150; int it=23; double cx=-0.1;double cy=0.65;
    Paint paint = new Paint();



    public DrawView(Context context, AttributeSet att) {
        super(context, att); //set the color in the creator of drawview
        paint.setARGB(255, 150,150,150);
    }


    @Override
    public void onDraw(Canvas canvas) {

        super.onDraw(canvas);
            canvas.drawRect(0, 0, 100, 100, paint); // as a test the drawview display


        double prr=pr; double pryy=pry;


        for (int ii=0;ii<pr+1;ii++) //pass the screen pixels in 2 directions
        {
            for (int jj=0;jj<pry+1;jj++)
            {
                    canvas.drawPoint(ii, jj, paint); 
            }
        }
    }
    //parameter setters
    public void setpr(int a) {pr=a;}
    public void setpry(int a) {pry=a;}
    public void setcx(double a) {cx=a;}
    public void setcy(double a) {cy=a;}

}

这是 MainActivity.java

package com.example.hazim.myapplication;

import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.app.Activity;
import android.content.Context;

public class MainActivity extends Activity {
    DrawView drawView=null; //instanciation of drawview
    Button bouton=null;
    EditText cx=null;
    EditText cy=null;
    EditText pr=null;
    EditText pry=null;


    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); // display activity main XML

        drawView = (DrawView)findViewById(R.id.drawView1); // load the drawView
        bouton = (Button)findViewById(R.id.button1); // load the button
        cx = (EditText)findViewById(R.id.EditText02); // load the 4 editTexts
        cy = (EditText)findViewById(R.id.EditText01);
        pr = (EditText)findViewById(R.id.EditText03);
        pry = (EditText)findViewById(R.id.EditText04);



    }
}

最佳答案

您没有正确配置您的Paint。您必须设置适当的笔划宽度(Paint#setStrokeWidth),以告诉 Canvas 您的点应该有多大。否则它将有 1 像素大,这在高分辨率显示器上非常小,所以您甚至看不到它。

此外,由于您正在使用此绘画来绘制矩形 - 我会为绘制点创建单独的 Paint 对象:

public class DrawView extends View {
    ....
    Paint rectPaint = new Paint();
    Paint pointPaint = new Paint();


    public DrawView(Context context, AttributeSet att) {
        super(context, att); //set the color in the creator of drawview
        rectPaint.setAntialias(true);
        rectPaint.setARGB(255, 150,150,150);

        pointPaint.setAntialias(true);
        pointPaint.setColor(Color.RED); //your point color goes here
        pointPaint.setStrokeWidth(getResources().getDimension(R.dimen.point_size)); //assuming you specified point size 
                                                                                    //in dp in dimes.xml resource file
    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawRect(0, 0, 100, 100, rectPaint);
        double prr=pr; double pryy=pry;

        for (int ii=0;ii<pr+1;ii++) //pass the screen pixels in 2 directions
        {
            for (int jj=0;jj<pry+1;jj++)
            {
                canvas.drawPoint(ii, jj, pointPaint);
            }
        }
    }
}

关于android - canvas.drawPoint 不适用于 4.4 或 5.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29197798/

相关文章:

java - 在 AndroidAnnotations SharedPreferences 中模拟链式方法调用

android - 缩放时如何使 Android 上的 CSS float 回流与桌面上一样?

java - Android 启动画面

javascript - 使用 Canvas 创建桌面通知图像,只有一个图像来自背景页面

javascript - 在 HTML5 Canvas 中创建表格

java - Android java-grpc 客户端到 python-grpc 服务器

android - 在 CountdownTimer 上获取剩余时间并将剩余时间用作分数 android

jquery - 模糊的字体,动态生成的 SVG 中的线条到 Canvas 中

javascript - 使用 `jsgif` 在动画 GIF 上构建图层

java - 如何在 JavaFX Canvas 上用鼠标画一条连续的线?