Пользовательский метод onDraw () не называется

<LinearLayout android:id="@+id/svLL" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ScrollView android:id="@+id/sv" android:layout_width="wrap_content" android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android"> <!-- <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/scrollbar_2_text" /> --> <com.mypackage.MyDrawableView android:layout_width="fill_parent" android:layout_height="wrap_content" /> </ScrollView> </LinearLayout> 

 public class MyDrawableView extends View { Context thisContext; public MyDrawableView(Context context, AttributeSet attr) { super(context); thisContext = context; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); final Paint paint = new Paint(); paint.setColor(Color.BLUE); paint.setTextSize(12); canvas.drawText("Blah blah", 0, 100, paint); } } 

 public class MyActivity extends Activity { // Your member variable declaration here // Called when the activity is first created. @Override public void onCreate(Bundle savedInstanceState) { // Your code here super.onCreate(savedInstanceState); setContentView(R.layout.xmllayout); LinearLayout svll = (LinearLayout) findViewById(R.id.svLL); svll.setLayoutParams(new LinearLayout.LayoutParams(300, 300)); } } 

Я помещаю onDraw() останова, но точка останова никогда не попадает внутрь onDraw() , что не так?

Добавьте setWillNotDraw(false) в конструктор MyDrawableView. Оригинальный ответ здесь .

Ваш вид имеет высоту 0. Вы установили, что у вашего представления есть height=wrap_content , но вы не переопределяете onMeasure() чтобы сообщить инструментарию пользовательского интерфейса, насколько велика ваша View.

Вам нужно @Override метод OnMeasure(int, int) чтобы указать размер вашего представления, вызвав setMeasuredDimension(int,int) .

Если вы этого не сделаете, метод по умолчанию установит, что ваш вид имеет размер width=0 height=0 . И поэтому даже не пытайтесь вызвать onDraw вообще.

Метод OnMeasure вызывает setMeasuredDimension(int,int) который указывает, насколько велика ваша точка зрения.

(Так что вам нужно получить размер экрана андроида по методу OnMeasure и вызвать setMeasuredDimension соответственно).

Просто сделайте layout_width и layout_height пользовательского представления некоторое исправление в начальное время, а не wrap_content или fill_parent . Это сработало для меня.

Хотя я новичок в андроиде, все же я считаю, что проблема связана с тем, что

 setContentView(R.layout.xmllayout); 

Вместо "R.layout.xmllayout" , MyDrawableView объект MyDrawableView (используя findViewById ) и проверьте. Я не пробовал, но надеюсь, что это сработает.

Вы должны использовать invalidate () в методе конструктора, чтобы получить onDraw Called.

После установки пользовательской ширины просмотра вы должны установить ширину прокрутки.

 FMChart = (HKFMDrawChart)findViewById(R.id.fm_chart); FMChart.setWidth(xxxx); float scrollViewWidth = FMChart.getScrellViewWidth(); FMChart.setLayoutParams(new LinearLayout.LayoutParams( (int) (scrollViewWidth + HKApplication.getScreenWidth() / 2), LinearLayout.LayoutParams.WRAP_CONTENT)); FMChart.postInvalidate(); // onDraw(); 
Intereting Posts
Подписание Google в приложении Android для использования бэкэнд Cloud Endpoints Возможно ли внедрить глубокие ссылки с веб-сайта на родное приложение? Как вы улавливаете URL-адреса, используя фильтр намерений с определенным значением параметра Установить язык на французский в android DatePickerDialog Получить фрагмент по тегу или id из tablayout, android То, что вызывается после метода onConfigurationchanged () Получение контактов для Android Запуск Android-эмулятора с параметром -noaudio возвращает «qemu-system-i386.exe: -audio: недопустимый параметр» Изменить обзор поверхности Активность возвращает изображение Установите флажок «Запомнить меня» Пример / учебник для создания формы ввода с помощью Android SDK Android Studio 0.4.3 – задача «собрать» не найдена в корневом проекте Как создать Drawable с необходимым цветом фона программно? Нечеткое SecurityException при использовании резервной копии службы Android (облачное резервирование)