1

私はstackoverflowに不慣れです!私はAndroidでアプリに取り組んでいますが、特定の時点で行き詰まりました。

4つのボタンとそれに描画されたキャンバスを持つアクティビティ(アクティビティ1)があります。キャンバスはカスタムビュー(ビュー1)で作成され、xmlファイルを介してアクティビティに描画されます。キャンバスをjpgファイルとしてSDカードに保存したい。保存のアクションは、ボタンを押すだけで発生する必要があります。

私がそれを機能させることを意図した方法は次のとおりでした:ボタンをクリックすることにより、ブール値がtrueに設定されます。このブール値は、アクティビティ1からキャンバスが描画されるビュー1に送信する必要があります。このビュー1は、ブール値がtrueまたはfalseに設定されているかどうかを監視します。ブール値が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:これは、キャンバスが描画される、私が作成したカスタムビューです。このコードでは、Acitivty1で作成したブール値の状態を継続的に監視したいと思います。

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 に答える