Создание собственного представления: как я могу расширить класс и получить доступ к частным переменным-членам базового класса? - PullRequest
0 голосов
/ 07 августа 2011

В качестве упражнения я пытаюсь расширить ImageButton, чтобы добавить некоторые функции, которые я считаю полезными.Один, в частности, это тень дроу.Я ударил эту пресловутую стену этим.

Мне кажется, что класс, расширяющий BitmapDrawable, необходим.Этот класс содержит объект Paint, используемый для рисования растрового изображения на экране.Если бы у меня был доступ к этому Paint объекту ... все, что мне нужно было бы сделать, это вызвать его setShadowLayer() метод ... но, увы, это private.Существует метод public, getPaint(), который возвращает объект рисования, но любые изменения в нем будут бесполезны, если не будет соответствующего метода setPaint().(Нет.)

В настоящее время мой мыслительный процесс выглядит примерно так:

  1. Создать класс ShadowBitmapDrawable, который extends BitmapDrawable
  2. Внутри этого класса каким-то образом измените объект BitmapDrawable Paint с помощью метода Paint setShadowLayer().
  3. В моем пользовательском классе ImageButton вызовите setImageDrawable(Drawable d) и передайте его моемуShadowBitmapDrawable объект.

Шаг 2 - дорожный блок.Что я могу сделать, чтобы изменить BitmapDrawable Paint объект?Обратите внимание, что я добавил свой мыслительный процесс только как показатель того, где я нахожусь в этой проблеме.Я открыт для других предложений.

Вот несколько ссылок:



PS У меня плохойЯ чувствую, что уже знаю ответ, который получу, и мне это не понравится.Думаю, я все равно оставлю вопрос и надеюсь на лучшее.

1 Ответ

1 голос
/ 07 августа 2011

Что я могу сделать, чтобы изменить объект Paint в BitmapDrawable?

Клонировать BitmapDrawable в ваш проект, преобразовать его в собственный пакет, сделать членом данных protected (или предоставитьprotected сеттер или что-то в этом роде), используйте ваш модифицированный BitmapDrawable и проверьте его.

...