gpt4 book ai didi

java - Android - 调用自定义 View 方法时出现空指针异常

转载 作者:行者123 更新时间:2023-11-29 04:58:15 25 4
gpt4 key购买 nike

我是 android 的新手,我正在尝试调用一种方法,该方法将使用 Canvas 的自定义 View 绘制的圆向上移动 10 像素。当我尝试调用所述方法时,我得到一个空指针异常,我不知道为什么。这是我的。

主要 Activity

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);
}

}

自定义 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();
}
}

主要 Activity 的 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 中为您的自定义 View 添加一个 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“添加”您在布局中声明的小部件作为 Activity View 层次结构的一部分,使它们在当前 Activity 的上下文中可供您使用。您所要做的就是调用 findViewById 获取对您要使用的小部件的引用

关于java - Android - 调用自定义 View 方法时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32931568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com