Есть ли способ создать класс, который выходит из Canvas в Android? - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь создать класс, который наследует класс Canvas для Android. Моя причина - добавить в этот класс более надежные и полезные методы для моей игровой среды. Когда я попытался привести свой объект AdvancedCanvas к Canvas в методе onDraw(). Я выполняю рисование в методе draw(), который принимает в качестве параметра объект advancedcanvas. Это вызывает исключение;

java.lang.ClassCastException: android.view.Surface $ CompatibleCanvas нельзя преобразовать в com.example.x.AdvancedCanvas

Вот мой блок кода ниже

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        AdvancedCanvas advancedcanvas =  (AdvancedCanvas) canvas;
        draw(advancedcanvas);
    }

Мой реальный вопрос: есть ли способ достичь этой цели? Или любые альтернативные идеи будут приветствоваться. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

В ваших кодах Canvas - это родительский класс, AdvancedCanvas - это дочерний класс.Трансляция с дочернего на родительский всегда разрешена, но трансляция с родительского на дочерний включает проверку типа и может вызвать исключение ClassCastException.

, например:

Animal animal = getAnimal(); // Maybe a Dog? Maybe a Cat? Maybe an Animal?
if (animal instanceof Dog) { // only successful in this condition
    Dog castedDog = (Dog) animal;
}

Но Canvas не являетсяэкземпляр AdvancedCanvas, поэтому произошла ошибка.

Если хотите, вы можете создать собственное представление, это хороший пример

Отредактировано : Попробуйте это:

 @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        AdvancedCanvas advancedcanvas =  new AdvancedCanvas();

        advancedcanvas.property1 = canvas.property1;//prepare advancedcanvas 
        advancedcanvas.setProperty2(canvas.property2)//or like this

        draw(advancedcanvas);//then use advancedcanvas 
    }
0 голосов
/ 18 сентября 2018
  1. Вы не можете делать такие броски.Поскольку onDraw - это метод override, он получает параметр откуда-то еще, который является холстом.
  2. Вы можете обернуть этот объект canvas.* * * * * * * * * * * * * * * * * * * * * * * * * * * 100 * * 100 * * * * * * * * * * * * * * * * * * * * * * * * * * т.сможет сделать:
    onDraw(Canvas canvas){
     AdvancedCanvas ac = AdvancedCanvas(canvas);
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...