Я нахожусь в процессе создания пользовательского представления, которое по сути является ImageButton с добавленной логикой, поэтому оно также имеет поведение RadioButton.Все, что я хочу сделать, - это встроить его в представление о том, что когда пользователь нажимает кнопку, изображение изменяется, внутреннее логическое значение помечается как true, чтобы отметить, что оно выбрано, и вызывается метод интерфейса, позволяющий RadioGroup быть частьючтобы отменить выбор всех других взглядов в нем. Я не хочу влиять на существующее поведение базового ImageButton вообще.
Ранее я сделал только один другой пользовательский вид, и это было следование учебнику почти точно до буквы.и так как в View есть много различных методов, связанных с щелчками / прикосновениями (т. е. onTouch, onClick, motion motion и т. д.), все это меня озадачило.Я прекрасно пишу сам интерфейс, его модификацию ImageButton, где я не слишком уверен, как атаковать его.
Итак, я вас всех спрашиваю: какой метод / методы мне нужно переопределить, чтобы добавить этопростая функциональность, не влияющая на текущее поведение ImageButton, и не испорченная возможностью установить onTouchListener для кнопки, которая будет выполнять дополнительные действия при нажатии без ущерба для этой встроенной логики переключателей?Если мне нужно переопределить что-то, что будет мешать поведению по умолчанию, которое я упомянул, что мне нужно добавить в новый метод для восстановления этой функциональности?
Это то, что я пока имею:
public class RadioImageButton extends AppCompatImageButton implements RadioCheckable {
//Default constructor
public RadioImageButton(Context context) {
super(context);
initView();
}
//Constructor with defined attributes
public RadioImageButton(Context context, AttributeSet attrs) {
super(context, attrs);
parseAttributes();
initView();
}
//Constructor with defined attributes and attributes taken from style defaults that aren't defined
public RadioImageButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
//=========================================================================
// Setup
//=========================================================================
private void initView()
{
}
private void parseAttributes()
{
}
}
Подход, который я хотел бы использовать, был бы примерно таким:
...All other code I already showed
mChecked = false;
@Overide
void onClick(...)
{
mChecked = true;
setImageSource(R.example.checked_image); // Or I can use a selector resource
*Call to Radio Interface*;
mOnTouchListener.onTouch(v, event); //Handle user onTouchListener
}
...
и оставил бы весь другой код в покое, хотя я уверен, что он не совсемэто просто.
Я подумал, что хорошим началом будет попытка найти исходный код для класса ImageButton по умолчанию и установить мой в качестве близкой реплики, чтобы я мог понять, как он работает, а затем изменить его оттуда, новсе, что я мог действительно найти, было это:
https://android.googlesource.com/platform/frameworks/base/+/android-7.0.0_r35/core/java/android/widget/ImageButton.java
, и нет никакого способа, который является фактическим источником, потому что нажатие Ctrl + O показывает намного больше функций, которые определяет ImageButton, которые не наследуются отдругой класс;несмотря на это, эта ссылка не очень полезна, так как в основном это гигантский комментарий с небольшим или отсутствующим кодом.
Спасибо за любые предложения, которые помогут мне сделать это самым простым способом.
EDIT: @pskink - просматривая код, который вы предоставили, кажется, что он пытается сгенерировать матрицу, чтобы преобразовать предоставленный объект рисования (src), чтобы он вписался в новый прямоугольник (dst) при сохранениисоотношение сторон и позиционирование (отсюда ScaleToFit.CENTER).Я бы предположил, что прямоугольник назначения был бы границами представления, в котором содержится нарисованный объект, который в данном случае является RadioButton, но, шагая через переопределение метода «draw ()», он, кажется, не делаетэто, хотя я не совсем уверен, как решается cavas.concat (матрица), поэтому я не уверен.Независимо от того, кажется, он не работает как задумано, или я как-то неправильно его использую.