android studio imageview上的setOnClickListener需要點擊兩次才能工作



android studio button (1)

我用setonclicklistener製作了ImageViews,但需要點擊兩次圖片才能正常工作。 我不明白為什麼會發生這種情況。 韋爾普!

我的ImageView的XML,它在相對佈局:

        <ImageView
            android:id="@+id/bNext"
            android:layout_width="64.785dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:src="@drawable/next" >
        </ImageView>

我的代碼為ImageView:

public class MainActivity extends Activity implements OnClickListener {        
    ...........    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
            ......
        final ImageView next = (ImageView) findViewById(R.id.bNext);    
        ...............
        next.setOnClickListener(this);    
    }    
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        ...................
        case R.id.bNext:
            if (j != imageCount) {
                image = imageArray[j];
                rl.setBackgroundResource(image);
                j = j + 1;
            }
            break;
        }
    }    
}

編輯:如問,完整的代碼:

public class MainActivity extends Activity implements OnClickListener {

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

    @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);

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

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

    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.bBack:
            if (j != 0) {
                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);
            SaveImage savefile = new SaveImage();
            savefile.SaveImagee(this, bm);
            break;
        case R.id.bNext:
            if (j != imageCount) {
                image = imageArray[j];
                rl.setBackgroundResource(image);
                j = j + 1;
            }
            break;
        }
    }

}

我認為問題是重點。 你必須按View一次才能獲得焦點,然後再次觸發onClick() 。 改變你的ImageView到一個ImageButton ,你不應該有這個問題,因為Buttons被設計為有焦點。

只是改變

android:src="@drawable/next"

android:background="@drawable/next"

你也可以實現一個onTouchListener ,並在ImageView上設置,然後聽取關鍵操作來確定要做什麼,但我不確定這是否值得。

在這裡我找到了一個可能有用的例子





onclick