1

コードは次のとおりです。

public class MainActivity extends Activity implements OnTouchListener {

    RelativeLayout rl;
    int i, j = 0;
    final int imageArray[] = { R.drawable.w1, R.drawable.w2, R.drawable.w3 };
    int image;
    final int imageCount = 3;

    ImageView back, save, next;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);

        final int imageArray[] = { R.drawable.w1, R.drawable.w2, R.drawable.w3 };
        image = imageArray[0];

        rl = (RelativeLayout) findViewById(R.id.rlBackground);

        back = (ImageView) findViewById(R.id.bBack);
        save = (ImageView) findViewById(R.id.bSave);
        next = (ImageView) findViewById(R.id.bNext);

        back.setOnTouchListener(this);
        save.setOnTouchListener(this);
        next.setOnTouchListener(this);

    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub

        switch (v.getId()) {
        case R.id.bBack:
            if (j == 0) {
                j = imageCount;
            }
            image = imageArray[j - 1];
            rl.setBackgroundResource(image);
            j = j - 1;
            break;
        case R.id.bSave:
            BitmapFactory.Options opts = new BitmapFactory.Options();
            opts.inSampleSize = 2;
            Bitmap bm = BitmapFactory.decodeResource(getResources(), image,
                    opts);
            // savePicture(bm, "image_name.jpg");
            SaveImage savefile = new SaveImage();
            savefile.SaveImagee(this, bm);
            Toast.makeText(getApplicationContext(),
                    "Image saved on your gallery!", Toast.LENGTH_LONG).show();
            break;

        case R.id.bNext:
            if (j != imageCount) {
                rl.setBackgroundResource(imageArray[j]);
                image = imageArray[j];
                j = j + 1;
            } else {
                j = 0;
                rl.setBackgroundResource(imageArray[j]);
                image = imageArray[j];
                j = j + 1;
            }
            break;

        }

        return false;
    }
}

問題: 保存ボタンをクリックすると、最初のクリックで機能します。次のボタンをクリックすると、関数をトリガーするために2回クリックする必要がありますが、その後、次のボタンをクリックし続けると、1回のクリックで機能します。しかし、ボタンバックに切り替えると、2回クリックしてから1回だけクリックする必要があり、次のボタンに切り替えると同じことが起こります-2回、1回..フォーカスと関係があると思います.

に変更ImageViewするImageButtonと、関数が 2 回トリガーされます。 if ステートメントを追加すると(event.getAction() == MotionEvent.ACTION_DOWN)、ボタンを 2 回クリックする必要があります。保存ボタンは常にワンクリックで機能するため、なぜこれが起こっているのかわかりません..

編集:私が変更した場合

image = imageArray[j];

image = imageArray[2];

その後、ボタンは最初はワンクリックで機能しますが、それでも取得できません。

4

2 に答える 2

0

ImageCount = 3 を設定したことに気付きましたが、配列では 0 からカウントを開始し、このアプリの開始時にその値をプログラムしましたが、間違いはないと思いました。

于 2013-08-03T12:31:08.080 に答える
-1

OnClickListener を実際に使用する必要があります。

しかし、タッチイベントを処理したことをシステムに伝えていないことが原因かもしれません。タッチ イベントを処理する場合は true を返し、それ以外の場合は false を返すようにしてください。例えば:

 switch (v.getId()) {
    case R.id.bBack:
        if (j == 0) {
            j = imageCount;
        }
        image = imageArray[j - 1];
        rl.setBackgroundResource(image);
        j = j - 1;
        return true;
    default:
        return false;
于 2013-08-03T00:11:32.987 に答える