Проблема с переопределением Android onDraw ()

#android #text #ondraw

#Android #текст #ondraw

Вопрос:

У меня небольшая проблема, вот код, который у меня есть на данный момент:

 public class MainActivity extends Activity {
    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);      
        setContentView(new GraphicView(this));

        TextView mainLabel = (TextView)findViewById(R.id.title);
            mainLabel.setText("Android Circle Path");
    }

    static class GraphicView extends View{
        public GraphicView(Context context){
            super(context);
        }

        @Override
        public void onDraw(Canvas canvas){


        }
    }  
}
  

И main.xml файл:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="30dip"
>
<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginLeft="20dip"
    android:layout_marginRight="20dip">

        <TextView
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginBottom="20dip"
            android:textSize="24.5sp"
            android:id="@ id/title">
        </TextView>

    </LinearLayout>
</LinearLayout>
  

Когда я пытаюсь установить текст в функции onDraw (), приложение вылетает, что я делаю не так?

Комментарии:

1. Трассировка стека из logcat помогла бы.

Ответ №1:

onDraw Метод представления следует использовать только для отображения в этом представлении. Вы не должны вызывать методы обновления пользовательского интерфейса в другом представлении. Переместите код для настройки заголовка в onCreate метод вашего действия, поскольку это нужно сделать только один раз. Затем просто нарисуйте свой круг в пользовательском представлении. Кроме того, поскольку ваш пользовательский вид не реализует ViewParent, его не следует использовать для хранения заголовка TextView. Реорганизуйте свой xml, чтобы переместить вид заголовка за пределы GraphicsView

Комментарии:

1. итак, я переместил TextView из GraphicsView в моем XML, а также переместил строку кода в мой метод onCreate, однако он по-прежнему выходит из строя. Есть другие идеи?

2. Где происходит сбой и с каким исключением? Пожалуйста, отредактируйте свой пост и добавьте logcat для исключения.

Ответ №2:

TextView это локальная переменная, созданная в onCreate методе этого Activity . Таким образом, область действия TextView ограничена только этим onCreate методом. Вы не можете получить к нему доступ вне этого метода. Более того, то, что вы пытаетесь сделать, неверно, внутри GraphView onDraw метода вы должны рисовать только GraphView компоненты, а не внешние представления или что-либо еще.