Добавление пользовательского изображения в основной макет
-
02-10-2019 - |
Вопрос
Вот сделка.
Я просматривал этот код о расширении изображения:
http://marakana.com/forums/android/examples/98.html
И мне было интересно, как я могу добавить новый вид в существующий файл макета XML, а также некоторые другие представления.
Я уже сделал это в своей основной линейной макете:
<FrameLayout android:id="@+id/FrameLayout01" android:layout_width="300dp" android:layout_height="300dp">
<com.marakana.Rose android:layout_height="wrap_content" android:layout_width="wrap_content"/>
Но проблема в том, что таким образом метод OnDraw не вызывается.
Кто -нибудь может предложить решение для этого? Может быть, некоторые примеры, в которых вы объединяете CustomViews с макетом XML.
Tnx.
Решение 2
Я думаю, что решил это. Я использовал свой код в файле main.xml, и он работает. Что мне нужно было сделать, так это переопределить новый конструктор класса, принимающий атрибут, вместе с контекстом в качестве параметра, а затем использовать FindViewByID (CustomViewName), чтобы ссылаться на его в действие и использовать функции, определенные в CustomView.
Другие советы
Вы добавили определение в res/values/attrs.xml?
<declare-styleable name="Rose">
</declare-styleable>
Я не уверен, нужно ли это, если вы не добавите ни одного атрибута XML ...
Кроме того, это поможет, если вы опубликовали код com.marakana.rose. Как пример, это классное объявление собственного компонента:
public class CalendarCell extends ImageButton implements OnTouchListener
Ondraw:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
И это фрагмент моего макета XML:
<TableRow>
<com.view.customcomponents.CalendarCell
style="@style/NumericImageButton"
android:id="@+id/calendar_row1_col1"
android:background="@drawable/calendar_bg_selector" />
Я сделал это некоторое время назад, следуя учебному пособию, но я не помню, где. Кроме того, я могу что -то упустить. Google немного, и вы найдете полезные ресурсы.
РЕДАКТИРОВАТЬ: Я думаю, что это учебные пособия, с которыми я следовал, хотя мне пришлось сделать какую -то работу, чтобы наконец заставить ее работать:
Чтобы инструменты разработчика Android взаимодействовать с вами, как минимум, вы должны предоставить конструктор, который принимает Контекст и атрибута объект как параметры. Этот конструктор позволяет
layout editor to create and edit an instance of your view.
class PieChart extends View {
public PieChart(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
И деталь Ответьте здесь