几个月前我就一直面临这个问题,我找不到任何相关信息。
我有一个带有函数 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/