Не могу перетащить и нарисовать в представлении, когда ресурс изображения установлен - PullRequest
0 голосов
/ 07 октября 2019

У меня есть код для рисования кругов, когда пользователь касается экрана, он работает отлично, пока я не добавлю ImageResource, когда я делаю это, круг больше не рисуется.

Мне нужно использовать ImageResource, потому чтокруг будет нарисован вокруг некоторых объектов на этом изображении, BackgroundResource может быть хорошим, но он искажает изображение.

Класс:

public class DragRectView extends TouchImageView {

    private Paint mRectPaint;

    private int mStartX = 0;
    private int mStartY = 0;
    private int mEndX = 0;
    private int mEndY = 0;
    private boolean mDrawCircle = false;
    private TextPaint mTextPaint = null;

    private OnUpCallback mCallback = null;

    public interface OnUpCallback {
        void onRectFinished(Rect rect);
    }

    public DragRectView(final Context context) {
        super(context);
        init();
    }

    public DragRectView(final Context context, final AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public DragRectView(final Context context, final AttributeSet attrs,
                        final int defStyle) {
    super(context, attrs, defStyle);
    init();
}

/**
 * Sets callback for up
 *
 * @param callback {@link OnUpCallback}
 */
public void setOnUpCallback(OnUpCallback callback) {
    mCallback = callback;
}

/**
 * Inits internal data
 */
private void init() {
    mRectPaint = new Paint();
    mRectPaint.setColor(getContext().getResources().getColor(android.R.color.holo_green_light));
    mRectPaint.setStyle(Paint.Style.STROKE);
    mRectPaint.setStrokeWidth(5); // TODO: should take from resources

    mTextPaint = new TextPaint();
    mTextPaint.setColor(getContext().getResources().getColor(android.R.color.holo_green_light));
    mTextPaint.setTextSize(20);
}

@Override
public boolean onTouchEvent(final MotionEvent event) {

    // TODO: be aware of multi-touches
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            mDrawCircle = false;
            mStartX = (int) event.getX();
            mStartY = (int) event.getY();
            invalidate();
            break;

        case MotionEvent.ACTION_MOVE:
            final int x = (int) event.getX();
            final int y = (int) event.getY();

            if (!mDrawCircle || Math.abs(x - mEndX) > 5 || Math.abs(y - mEndY) > 5) {
                mEndX = x;
                mEndY = y;
                invalidate();
            }

            mDrawCircle = true;
            break;

        case MotionEvent.ACTION_UP:
            if (mCallback != null) {
                mCallback.onRectFinished(new Rect(Math.min(mStartX, mEndX), Math.min(mStartY, mEndY),
                        Math.max(mEndX, mStartX), Math.max(mStartY, mEndY)));
            }
            invalidate();
            break;

        default:
            break;
    }

    return true;
}

@Override
protected void onDraw(final Canvas canvas) {
    super.onDraw(canvas);

    if (mDrawCircle) {
        canvas.drawCircle(mStartX,mStartY, (float) Math.sqrt(Math.pow(mEndX-mStartX,2)+Math.pow(mEndY-mStartY,2)),mRectPaint);
    }
}

Моя основная деятельность:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    DragRectView dragRectView = findViewById(R.id.dragView);
    //dragRectView.setImageResource(R.drawable.img);
    dragRectView.setOnUpCallback(new DragRectView.OnUpCallback() {
        @Override
        public void onRectFinished(Rect rect) {
            System.out.println(rect);
        }
    });
}

Кто-нибудь знает, как я могу что-то нарисовать в виде с набором изображений?

1 Ответ

0 голосов
/ 09 октября 2019

Когда вы устанавливаете ресурс изображения, затем он устанавливает его как содержимое вашего ImageView, ваш DragRectView расширяется от TouchImageView (который расширяется от того, что не ясно).

Вы можете декодировать растровое изображение из вашего ресурса изображения с помощью BitmapFactoryв конструкторе вашего представления.

Bitmap imgRes = BitmapFactory.decodeResource(getResources(), R.drawable.img);

и нарисуйте растровое изображение в onDraw () следующим образом

canvas.drawBitmap(imgRes, xPosition, yPosition, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...