Прорисовка drawable по клику

312
23 июля 2017, 09:22

Я создал свою реализацию ImageView и переопределил метод onDraw(Canvas canvas); Все работает, но я хочу чтоб при нажатии на Button, на моем полотне дополнительно появлялся drawable в указанных координатах, не более. Т.е у меня уже есть на полотне drawable, при клике button появлялось ещё одно drawable.

MainActivity.java Не работает
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    MyImageView imageView;
    Button btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (MyImageView) findViewById(R.id.canvas);
        btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(this);
    }
    @Override
    public void onClick(View view) {
        Bitmap bitmap = 
BitmapFactory.decodeResource(getResources(),R.drawable.bumerang);
        Canvas canvas = new Canvas();
        canvas.drawBitmap(bitmap,0,0,null);
        imageView.draw(canvas); //пытаюсь нарисовать на полотне drawable
        imageView.invalidate(); // как гласит легенда update метода onDraw
    }
}
MyImageView.java
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.support.annotation.Nullable;
import android.util.AttributeSet;

/**
 * Created by AndrewPC on 17.07.2017.
 */
public class MyImageView extends 
android.support.v7.widget.AppCompatImageView {
    private Canvas canvas;
    public MyImageView(Context context) {
        super(context);
    }
    public MyImageView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }
    public MyImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.plate);
        canvas.drawBitmap(bitmap,0,0,null); // тут все работает как надо
    }
}
Answer 1

Нашел кривое решение, но благо работает.

public void update(){ //вызывая этот метод canvas обновляется
    isDraw = true; //разрешает нарисовать drawable
    invalidate(); // вызывает onDraw();
}
public void drawBitmap(){
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.bumerang);
    canvas.drawBitmap(bitmap,0,0,null);
    invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
    this.canvas = canvas;
    super.onDraw(canvas);
    if(isDraw) drawBitmap(); //когда onDraw вызвался, вызывается метод drawBitmap();
}

Есть ли у кого решение без говнокода?

READ ALSO
CSS/HTML фреймворк для обычных страниц

CSS/HTML фреймворк для обычных страниц

Нужен CSS/HTML фреймворк для обычного контентаСуществует ли вообще что-то подобное? Как называются такие фреймворки? Постараюсь объяснить, что...

261
Как окрулить число в HTML?

Как окрулить число в HTML?

Как округлить число в HTML до заданного количества знаков после запятой, если я использую значения из java-коллекции с помощью thymeleaf?

275
Отдача файла на скачивание

Отдача файла на скачивание

Можно ли не используя серверную часть, а jQuery, не открывать изображение, а сразу отдать его на скачивание?

452
Редактирование таблицы с помощью microsoft.office.interop.word c#

Редактирование таблицы с помощью microsoft.office.interop.word c#

Здравствуйте! Создаю документ word из шаблона с рамкойПри создании таблицы она наползает на рамку

368