Несоответствие типов: невозможно преобразовать тип элемента Object в Path из строки для (Path path: _graphics) { - PullRequest
0 голосов
/ 08 февраля 2012
import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;


    public class DrawingActivity extends Activity {
        private ArrayList _graphics = new ArrayList();
        private Paint mPaint;
        Handler myHandler = new Handler() {

        public void handleMessage(android.os.Message msg) {
        myview.invalidate();

        };
        };
        Myview myview;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // setContentView(new DrawingPanel(this));
        mPaint = new Paint();
        mPaint.setDither(true);
        mPaint.setColor(0xFFFFFF00);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeWidth(3);
        myview = new Myview(this);
        myview.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
        LayoutParams.FILL_PARENT));
        setContentView(myview);
        myHandler = new Handler();

        }

        class Myview extends View {

        public Myview(Context context) {
        super(context);

        }

        Path path;

        @Override
        public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
        path = new Path();
        path.moveTo(event.getX(), event.getY());
        path.lineTo(event.getX(), event.getY());
        _graphics.add(path);
        } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
        path.lineTo(event.getX(), event.getY());
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
        path.lineTo(event.getX(), event.getY());
        }
        invalidate();
        return true;
        }

        @Override
        protected void onDraw(Canvas canvas) {
        for (Path path :_graphics) {
        // canvas.drawPoint(graphic.x, graphic.y, mPaint);
        canvas.drawPath(path, mPaint);
        }
        }
        }

        }

Здесь компилятор показывает ошибку в этой строке Несоответствие типов: невозможно преобразовать из типа элемента Объект в путь ---------- для (Путь к пути: _graphics) {какая проблема возникает здесь

1 Ответ

0 голосов
/ 08 февраля 2012

Ваш ArrayList является нетипизированным, поэтому, даже если вы можете помещать туда только объекты этого типа, компилятор этого не знает. Вам также нужно использовать дженерики (если Java на Android это поддерживает), например

ArrayList<Path> _graphics = new ArrayList<Path>();

Или переписать цикл, чтобы можно было разыгрывать элементы по мере их поступления из списка.

for (int c=0; c< _graphic.size(); ++c ) {
    Path p = (Path)_graphics.get(c);
    ....
}

Удачи.

...