Android-приложение вылетает с Simple draw to canvas, отображая растровое изображение - PullRequest
0 голосов
/ 10 февраля 2019
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = findViewById(R.id.button);
    button.setOnClickListener(this);

    int height = this.getWindow().getDecorView().getHeight();
    int width = this.getWindow().getDecorView().getWidth();
    bitmap = Bitmap.createBitmap(height, width, Bitmap.Config.ARGB_8888 );
    canvas = new Canvas(bitmap);

    imageView = findViewById(R.id.imageView);
}

@Override
public void onClick(View v) {

    if (v.getId() == R.id.button){

        canvas.drawColor(Color.RED);
    }

    imageView.setImageBitmap(bitmap);
}
}

Кто-нибудь знает, почему приведенный выше фрагмент кода для Android Studio может вызвать постоянное падение приложения?Я новичок в Android Studio и хочу привыкнуть к построению прямоугольников и фигур, прежде чем что-то еще, но, похоже, у меня возникают трудности даже с этим.

Отображает ошибку рисования растрового изображения со значениями не> 0, но проблема в том, что после использования функции печати в onClick, захвата высоты или ширины из окна или из imageView, мне возвращается значение> 0, поэтомуЯ не понимаю.

1 Ответ

0 голосов
/ 10 февраля 2019

Вы получаете высоту и ширину в методе onCreate до того, как представление было нарисовано, что приводит к возвращению высоты 0, ширины 0, так как система Android не знает точную ширину и высоту представления. Вы можете использовать некоторый метод, например post (Runnable), чтобы узнать, нарисован ли вид. Измените свой код, как показано ниже.

View view = this.getWindow().getDecorView();
view.post( new Runnable() {
    @Override
    public void run() {
         width  = view.getMeasuredWidth();
         height = view.getMeasuredHeight();
         bitmap = Bitmap.createBitmap(height, width, Bitmap.Config.ARGB_8888 );
         canvas = new Canvas(bitmap); 
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...