Java Android Paint应用程序阵列
我正在尝试制作一个简单的绘画应用程序。存储油漆的阵列有问题,我找不到解决方案。如果我注释掉了与它运行的数组有关的部分,但是(显然)应用程序没有按预期工作。当我打开应用程序时,它会崩溃,代码如下:Java Android Paint应用程序阵列,java,android,android-canvas,Java,Android,Android Canvas,我正在尝试制作一个简单的绘画应用程序。存储油漆的阵列有问题,我找不到解决方案。如果我注释掉了与它运行的数组有关的部分,但是(显然)应用程序没有按预期工作。当我打开应用程序时,它会崩溃,代码如下: package com.example.paint.views; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics
package com.example.paint.views;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class PaintView extends SurfaceView implements Callback {
PaintCircle[] circles = new PaintCircle[10000];
@Override
public boolean onTouchEvent(MotionEvent event) {
// When touched
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Paint blue = new Paint();
blue.setColor(Color.BLUE);
blue.setStyle(Style.FILL);
circles[circles.length] = new PaintCircle(event.getX(),
event.getY(), 20, blue);
break;
case MotionEvent.ACTION_MOVE:
Paint green = new Paint();
green.setColor(Color.GREEN);
green.setStyle(Style.FILL);
circles[circles.length] = new PaintCircle(event.getX(),
event.getY(), 20, green);
break;
}
return true;
}
@Override
public void draw(Canvas c) {
// Draw to the canvas
super.draw(c);
c.drawARGB(255, 255, 255, 255);
for (int i = 0; i < circles.length; i++) {
c.drawCircle(circles[i].cx, circles[i].cy, circles[i].radius,
circles[i].paint);
}
}
public PaintView(Context context, AttributeSet attrs) {
super(context, attrs);
getHolder().addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// When the surface view is created
Canvas c = getHolder().lockCanvas();
draw(c);
getHolder().unlockCanvasAndPost(c);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
Canvas c = getHolder().lockCanvas();
draw(c);
getHolder().unlockCanvasAndPost(c);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
}
circles[circles.length]
是数组的第10001个元素,因为长度是静态的
最好使用动态增长的列表
,如数组列表
:
List<PaintCircle> circles = new ArrayList<PaintCircle>();
@Override
public boolean onTouchEvent(MotionEvent event) {
// When touched
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Paint blue = new Paint();
blue.setColor(Color.BLUE);
blue.setStyle(Style.FILL);
circles.add(new PaintCircle(event.getX(),
event.getY(), 20, blue));
// ...
@Override
public void draw(Canvas c) {
// Draw to the canvas
super.draw(c);
c.drawARGB(255, 255, 255, 255);
for (PaintCircle circle : circles) {
c.drawCircle(circle.cx, circle.cy, circle.radius,
circle.paint);
}
}
List circles=new ArrayList();
@凌驾
公共布尔onTouchEvent(运动事件){
//触摸时
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
蓝色油漆=新油漆();
blue.setColor(Color.blue);
蓝色。设置样式(样式填充);
添加新的画圈(event.getX(),
event.getY(),20,蓝色);
// ...
@凌驾
公共空白绘图(画布c){
//画到画布上
super.draw(c);
c、 drawARGB(255、255、255、255);
用于(画圈:圈){
c、 绘图圆(circle.cx、circle.cy、circle.radius、,
圆圈(油漆);
}
}
另一种可能是存储一个单独的数组索引,告诉你哪一个是数组的最后一个元素。当你添加一个圆时,增加索引并只绘制那些被赋值的元素
List<PaintCircle> circles = new ArrayList<PaintCircle>();
@Override
public boolean onTouchEvent(MotionEvent event) {
// When touched
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Paint blue = new Paint();
blue.setColor(Color.BLUE);
blue.setStyle(Style.FILL);
circles.add(new PaintCircle(event.getX(),
event.getY(), 20, blue));
// ...
@Override
public void draw(Canvas c) {
// Draw to the canvas
super.draw(c);
c.drawARGB(255, 255, 255, 255);
for (PaintCircle circle : circles) {
c.drawCircle(circle.cx, circle.cy, circle.radius,
circle.paint);
}
}