0

我有一个小问题是我到目前为止的代码:

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() 函数中设置文本时,应用程序崩溃了,我做错了什么?

4

2 回答 2

1

onDraw应该使用视图的方法单独渲染到该视图。您不应该在另一个视图中调用 UI 更新方法。将用于设置标题的代码移动到活动的onCreate方法中,因为这只需要完成一次。然后在您的自定义视图中绘制您的圆圈。此外,由于您的自定义视图没有实现 ViewParent,因此不应使用它来保存标题 TextView。重新组织您的 xml 以将标题视图移到 GraphicsView 之外

于 2011-05-27T14:47:30.267 回答
0

TextViewonCreate是在 that 的方法中创建的局部变量Activity。因此,范围TextView仅限于该onCreate方法。您无法在该方法之外访问它。此外,您尝试做的不是正确的方法, insideGraphViewonDraw方法您应该GraphView单独绘制组件,而不是外部视图或其他任何东西。

于 2012-05-07T18:49:51.340 回答