2015-02-10 92 views
0

我在调用drawLine()后更新画布时出现问题;在ActionBaryActivity中更新画布

这里是我的代码:

public class Map extends ActionBarActivity { 

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     Paint p = new Paint(); 
     Log.v("Tag", "in here"); 
     Log.v("Tag", Integer.toString(customView.lines.size())); 
     switch (item.getItemId()) { 
      case R.id.action_undo: 
       customView.lines.remove(customView.lines.size() - 1); 
       Canvas c = new Canvas(); 
       for (Line line: customView.lines){ 
        Log.v("Tag", "in here2"); 

        c.drawLine(line.startX,line.startY,line.endX,line.endY,p); 
       } 

       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
} 

我想在画布上直接调用此方法后更新。但是我知道如何做到这一点的唯一方法是使用invalidate()方法,并且这只能在View中完成。有关如何完成这项工作的任何建议?非常新的android开发。

谢谢!

回答

0

你没有绘画任何东西。 你需要实现一个自定义视图,你可能已经在看你的代码,这可以让你画一条线。

public class CustomDrawableView extends View { 

    protected void onDraw(Canvas canvas) { 
      for (Line line: customView.lines){ 
       Log.v("Tag", "in here2"); 

       c.drawLine(line.startX,line.startY,line.endX,line.endY,p); 
      } 
    } 
} 

看一看下面的代码在GitHub上: YetAnotherDrawableDemo

阅读以下链接: CanvasCanvas and Drawables

+0

我已经做有一个观点。但是,问题是我需要从MenuItem获取结果后画一些东西。例如,我有MenuItem是“绘制”。我如何在活动和视图之间传达这些信息? – user3750474 2015-02-10 21:06:04

+0

添加一个设置布尔值的方法,检查onDraw方法中的布尔值,如果它是真的绘制线条,那么不会。在MenuItem的处理程序中,在视图上调用此方法 – 2015-02-10 21:11:36