gpt4 book ai didi

android - 无法从 Android 中的另一个类调用自定义绘制方法

转载 作者:行者123 更新时间:2023-11-29 16:06:45 31 4
gpt4 key购买 nike

第一次来这里提问。我的 android 应用程序有这个问题。我想在我的自定义 View 类中创建不同的绘制方法。三个按钮对应三种不同的形状。当按下一个按钮时,它会绘制它的形状。但是,当我尝试从 MainActivity 调用自定义绘制以进行测试时,应用程序崩溃了。

主要 Activity

import com.example.shapes.view.ShapesView;

public class MainActivity extends Activity {

ShapesView shapesview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

shapesview = (ShapesView) findViewById(R.id.ShapesViewID);
shapesview.DrawRectangle();
}

形状 View

public class ShapesView extends View{

Canvas canvas;

public ShapesView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}

@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
this.canvas = canvas;
}

public void DrawRectangle() {
Paint mypaint = new Paint();
mypaint.setColor(Color.BLUE);
canvas.drawRect(30, 30, 200, 200, mypaint);
}
}

我的 XML 布局文件

<com.example.shapes.view.ShapesView
android:id="@+id/ShapesViewID"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content" />`

请帮忙!非常感谢!

最佳答案

如果我理解你的问题,你需要一个自定义 View (一个按钮),它会根据某些事件以不同的方式自行绘制。如果是这种情况,那么您需要遵守 android 关于 View 绘制的指南,看看 here .

现在,针对您的情况,一种可能的解决方案是设置某种关于 View 状态的标志,然后在您准备好绘制时使用该标志。例如你可以这样做:

public class ShapesView extends View{

public int state = 0;

public ShapesView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}

@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
if (state == 1) {
Paint mypaint = new Paint();
mypaint.setColor(Color.BLUE);
canvas.drawRect(30, 30, 200, 200, mypaint);
}
}

然后,每当您需要从 Activity 中绘制 View 时,您可以使用以下命令:

myview.state = 1;
myview.invalidate();

在您的代码中,您正在做的是在 Activity 的 onCreate 期间调用 View 函数,而 Activity 又会尝试使用空 Canvas ,因为在此期间尚未调用 View 的 onDraw 方法。此外,正如其他人指出的那样,您不得在 onDraw 方法之外使用 Canvas 对象。

希望这有助于...

关于android - 无法从 Android 中的另一个类调用自定义绘制方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17596053/

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