1

我是stackoverflow的新手!我一直在 android 中开发一个应用程序,但在特定点上卡住了。

我有一个活动(活动 1),它有四个按钮和一个画布。画布是在自定义视图(视图 1)中创建的,然后通过 xml 文件将其绘制到活动中。我想将画布作为 jpg 文件保存到我的 SD 卡中。保存操作必须在按下按钮时发生。

我打算如何工作如下:通过单击按钮,布尔值设置为 true。这个布尔值必须从活动 1 发送到绘制画布的视图 1。该视图 1 将监视布尔值是否设置为真或假。如果布尔值设置为 true,则会运行一段代码,将画布保存为 jpg。

我的问题在于布尔值的监控。如何在自定义视图(视图 1)中持续监控布尔值的状态?

活动1:所以在这里我有我的主要活动,其中我有一个按钮,单击时将布尔值设置为true。(我将代码剥离到论坛的基本部分)

public class ShowImage extends Activity implements ColorPickerDialog.OnColorChangedListener {

 public boolean saveCanvas = false;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.image);

 Button saveButton = (Button)findViewById(R.id.savePic);
    saveButton.setOnClickListener(saveListener);
}

private OnClickListener saveListener = new OnClickListener(){
    public void onClick(View v) {
        saveCanvas = true;          
};

视图 1:这是我创建的用于绘制画布的自定义视图。在这段代码中,我想持续监控我刚刚在 Acitivty 1 中创建的布尔值的状态。

public class MyView extends View {

    boolean saveCanvas = false;

Context context;

public MyView(Context c, AttributeSet as) {
    super(c, as);
    ....    
}

//CONTINUOUSLY MONITOR THE STATE OF THE BOOLEAN
//IF TRUE SAVE PICTURE, ELSE CONTINUE CODE

 @Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {            
    super.onSizeChanged(w, h, oldw, oldh);        
    ....
}

@Override
protected void onDraw(Canvas canvas) {      
    ....
}

}

我希望我的问题以某种方式清楚,并希望我提供了足够的代码来让有人帮助我。如果需要更多信息,请告诉我。

干杯!

4

1 回答 1

0

如果我理解正确,您希望在用户点击按钮后立即将当前画布保存为 jpg。在这种交互式情况下,轮询布尔值以更改不是您想要的方式。用户操作正在引发应用程序操作,因此您应该告诉视图在用户单击按钮时捕获图片。

例如,视图可以有一个方法

  public void capturePicture(){
      // capture the canvas as a jpg
  }

然后在您的 onClick 处理程序中,您只需调用此方法

public class ShowImage extends Activity implements ColorPickerDialog.OnColorChangedListener {

 public boolean saveCanvas = false;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.image);

     Button saveButton = (Button)findViewById(R.id.savePic);

        saveButton.setOnClickListener(saveListener);
    }

    private OnClickListener saveListener = new OnClickListener(){
        final MyView theView = (MyView)findViewById(R.id.viewID);
        public void onClick(View v) {
            theView.capturePicture();          
    };
于 2012-10-29T16:03:35.583 回答