* 按下“bouton”按钮后,我想在面板上画一条名为“maview”的线。但我的程序在整体布局上绘制线条,按钮消失。 你有个主意吗?谢谢! * 我的代码:
package esslineter.pack;
import android.app.Activity;
import android.os.Bundle;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
import android.widget.TextView;
import android.content.Context;
public class EsslineterActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView (R.layout.main);
}
public void bouton (View view)
{
maView cv=new maView(this);
setContentView(cv); cv.invalidate();
}
public class maView extends View
{
public maView(Context context)
{
super(context);
}
@Override
protected void onDraw(Canvas canvas)
{
Paint p = new Paint();
p.setColor(Color.WHITE);
p.setStyle(Paint.Style.STROKE);
p.setStrokeWidth(3);
canvas.drawColor(Color.BLUE);
canvas.drawLine(0,0, 100, 100, p);
}
}
}
我的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/bouton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="bouton"
android:text="draw line" />
<View class="EsslineterActivity.maView"
android:id="@+id/surfaceView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.86" />
</LinearLayout>
答案 0 :(得分:0)
以下是onClick侦听器中的错误:
maView cv=new maView(this);
setContentView(cv);
您已在onCreate
中提供了有关活动的视图 - 此处您说现在活动的基本视图应为maView
。只需将此段代码更改为:
maView cv = (maView) findViewById(R.id.surfaceView1);
在这里,您不会创建新视图,而是使用现有视图并在那里绘制。
答案 1 :(得分:0)
当您致电setContentView(cv)
时,您正在更改整个活动布局,以便一切消失,maView
成为屏幕上显示的唯一视图。
相反,您可以在XML布局(android:visibility="gone"
)中隐藏视图,并在单击按钮时显示该视图。
<View class="EsslineterActivity.maView"
android:id="@+id/view1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone" />
在您的代码中:
public void bouton (View view)
{
View maView = findViewById(R.id.view1);
maView.setVisibility(View.VISIBLE);
}
如果您必须在同一活动中多次呼叫setContentView()
,则通常会出现问题。它应该只在onCreate()
方法的开头调用一次。