簡體   English   中英

Android - 調用自定義View方法時獲取空指針異常

[英]Android - Getting a null pointer exception when calling custom View method

我是android的新手,我試圖調用一個方法,使用畫布將自定義視圖繪制的圓移動10個像素。 當我嘗試調用所述方法時,我得到一個空指針異常,我無法弄清楚為什么。 這就是我所擁有的。

主要活動

public class CustomView extends Activity {
XView xv;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_customview);
}

public void moveUp(View view){
    xv.setY(view);
}

}

自定義視圖

public class XView extends View implements View.OnClickListener{

private Paint mPaint = new Paint();
int oX = 200;
int oY = 200;


public XView(Context context, AttributeSet attrs){
    super(context, attrs);
    //setOnClickListener(this);
}



@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    mPaint.setStyle(Paint.Style.FILL);
    mPaint.setColor(Color.MAGENTA);

    canvas.drawColor(Color.WHITE);
    canvas.drawCircle(oX, oY, 50, mPaint);
}
public void onClick(View view){
    oX=oX+10;
    view.postInvalidate();
}


public void setY(View view)
{
    oY=oY+10;
    view.postInvalidate();
}
}

主要活動的XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".customview"
android:orientation="vertical">

<com.mycompany.customview.XView
    android:layout_width="wrap_content"
    android:layout_height="200dp" />


<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_alignParentTop="true"
        android:layout_alignLeft="@+id/button2"
        android:layout_alignStart="@+id/button2"
        android:onClick="moveUp"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_alignTop="@+id/button2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/button"
        android:layout_centerHorizontal="true"
        android:id="@+id/button2" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:id="@+id/button" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:id="@+id/button5"
        android:layout_alignParentBottom="true"
        android:layout_alignLeft="@+id/button2"
        android:layout_alignStart="@+id/button2" />
</RelativeLayout>

謝謝

您需要在xml中的自定義視圖中添加一個ID:

  <com.mycompany.customview.XView
    android:id="@+id/xvview_id"
    android:layout_width="wrap_content"
    android:layout_height="200dp" />

並使用findViewById初始化您的成員

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_customview);
    xv = (XView) findViewById(R.id.xvview_id);
}

當您調用setContentView ,Android會“添加”您在布局中聲明的小部件,作為活動視圖層次結構的一部分,使它們在當前活動的上下文中可用。 你要做的就是調用findViewById來獲取你想要使用的小部件的引用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM