Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在新位置多次绘制矩形不工作_Android_Dynamic_Android Asynctask_Draw_Shapes - Fatal编程技术网

Android 在新位置多次绘制矩形不工作

Android 在新位置多次绘制矩形不工作,android,dynamic,android-asynctask,draw,shapes,Android,Dynamic,Android Asynctask,Draw,Shapes,每次我用这段代码创建一个新的矩形时,它都不起作用,我只能画到一个指定的位置,如果我在执行时使用一个变量来改变位置,它不会画任何东西 在Asynctask方法中: rect = new desenho(main.this, x, y); 这就叫: public class desenho extends View{ int x, y; Paint mPaint = new Paint(); public desenho(Context

每次我用这段代码创建一个新的矩形时,它都不起作用,我只能画到一个指定的位置,如果我在执行时使用一个变量来改变位置,它不会画任何东西

在Asynctask方法中:

rect = new desenho(main.this, x, y);
        
这就叫:

public class desenho extends View{
    
    int x, y;
    Paint mPaint = new Paint();
    
    public desenho(Context context, int x, int y) {
        super(context);
        this.x = x;
        this.y = y;
        mPaint.setStrokeWidth(3);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setColor(Color.BLACK);
    }
    
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension(width, y);
    }
    
    @Override
    protected void onDraw(Canvas c) {
        // TODO Auto-generated method stub
        super.onDraw(c);
        c.drawRect(5, y, width-5, y+x, mPaint);
    }
}

在我看来,您希望大小与位置无关。为此,画布中必须满足这些要求。drawRect(左、上、右、下、绘制):

  • 左-右=a
  • 顶部-底部=b
其中a,b是常数。例如:

c.drawRect(xPos, yPos, xPos + width - 1, yPos + height - 1, mPaint);
在这个例子中你可以看到

  • 左-右=xPos-(xPos+宽度-1)=1-宽度
  • 顶部-底部=yPos-(yPos+高度-1)=1-高度

两者都是常数→ 大小不变。

您的背景不是黑色的,是吗?:)。看起来您可能正在黑色背景上绘制一个黑色矩形。您还可以尝试使用调试器逐步检查代码,以查看调用drawRect时的值;不,背景是白色的,我检查了system.out上的值,它们是正确的。。我不知道怎么了。。。可能原因是AsyncTaskMethod?谢谢你的回复。但是,如果我理解正确,那么我只会改变矩形的顶部和底部坐标,它们总是一个常数。。我到家后会深入分析你的答案。看来你是对的。乍一看,我认为作为底部参数的一部分的x是指一些水平属性,但现在我看到它实际上是常数。顺便说一下,最右边的像素的索引宽度为-1,所以如果你想让你的矩形居中,宽度-5应该是宽度-6@Joel Sjögren,当我用这个:c.drawRect创建一系列矩形时(5,top,width-5,top+bottom,mpain);它不起作用(第一个图像)。但是如果我只创建一个:c.drawRect(5,5,width-5,5+bottom,mpain);它起作用(第二个图像)。原因似乎是在运行时递增的top变量…图像: