3

我已经用 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;
        }
    }

}
4

1 回答 1

2

我认为问题在于焦点。您必须按一次View以获得焦点,然后再次触发onClick()。改变你ImageViewImageButton,你不应该有这个问题,因为Buttons设计有焦点。

只是改变

android:src="@drawable/next"

android:background="@drawable/next"

您也可以实现onTouchListener并设置它,ImageView然后听关键操作以确定要做什么,但我不确定这是否值得。

在这里,我找到了一个可能有帮助的例子。

于 2013-08-01T20:26:24.683 回答