ljwbupt
2015-04-15 03:37
采纳率: 90%
浏览 1.9k

Android编程在一个view中开启另一个view

LZ是Android入门菜鸡,求大神拯救,我在程序的一开始用xml布局文件写了一个按钮,然后这个xml是以view的形式显示的,我的设想是一点击按钮,程序就在当前view中开启另一个画图的view。

最开始是这样声明的

```public float xAxis = 0;
public float yAxis = 0;
private Button start;
private LayoutInflater layIn;
private View paint_layout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    layIn = LayoutInflater.from(this);
    paint_layout = layIn.inflate(R.layout.paint_layout, null);
    setContentView(paint_layout);
    //setContentView(new MyView(this));
    start = (Button) findViewById(R.id.start);
    start. setOnClickListener(MyPaint.this);
    start.setVisibility(View.VISIBLE);

然后点击事件是这样的


```public void onClick(View v) {
        switch (v.getId()) {
          case R.id.start:            
              setContentView(new MyView(this));
              break;
          default:  
              break;
        }       
    }

Myview是这样的

``` public MyView(Context context){
super(context);

Display mDisplay = getWindowManager().getDefaultDisplay();
widthScr = mDisplay.getWidth();
heightScr= mDisplay.getHeight();
paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(8);
waitMain();
path=new Path();
path.moveTo(xAxis, yAxis);
for (int j=0; j<10;j++){
path.lineTo( j*75 + xAxis , j*75 + yAxis);
}
}
private void waitMain() {
// TODO Auto-generated method stub
if(mainAc.startPaint[0] == 1){
xAxis = widthScr/2;
yAxis = heightScr/2;
}else{
waitMain();
}

}

    protected void onDraw (Canvas canvas){          
        canvas.drawColor(Color.BLACK);//画布背景为黑色
        effect=new CornerPathEffect(10);//选择曲线效果
        //canvas.translate(8, 8);
        paint.setPathEffect(effect);
        paint.setColor(Color.WHITE);
        canvas.drawPath(path, paint);
        //canvas.translate(0, 60);
        invalidate();
    }           
}

现在的情况是一点击按钮程序就卡死直接强退,求问大神们这是为什么啊?
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • sirnuo 2015-04-15 04:23
    已采纳

    Activity的setContentView(new MyView(this));方法是不能重复调用的.
    paint_layout = layIn.inflate(R.layout.paint_layout, null);
    你可以用新的view 替换 paint_layout 的 view
    学习一下 android ViewGroup

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • devmiao 2015-04-15 03:38
    评论
    解决 无用
    打赏 举报
  • bdmh 2015-04-15 03:41

    你最好是开一个activity,如果你要在本页面切换,可以用控制visible的方法,或者用fragment切换页面

    评论
    解决 无用
    打赏 举报
  • 91program 2015-04-15 03:42

    可能通过如下代码:

    Intent intent = new Intent();
    intent.setClass(MainActivity.this, DialPadActivity.class);    // 参数:当前页面/要去的页面
    startActivity(intent);
    
    评论
    解决 无用
    打赏 举报
  • Nowindyli 2015-04-15 04:06

    你要开启View,就在paint_layout 这个view 里面去加载,里面放个lineraLayout或者别的layout,addView去加载就好,别用setContentView。。。

    评论
    解决 无用
    打赏 举报
  • sirnuo 2015-04-15 04:31

    一个active中,多次使用setContentView加载不同页面有什么坏处
    http://www.eoeandroid.com/thread-233441-1-1.html

    评论
    解决 无用
    打赏 举报
  • 清水依恋成 2015-04-15 06:46

    给你一个建议:

    View布局- 容器
    -----AbsoluteLayout 第一个布局
    -----LinearLayout 子布局,高宽100%

    这样你就可以使用 第一个布局.addView(另一个view)打开了。view.x,y随便定,愿意在哪儿就在哪儿。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题