Java onTouchListener一个ImageView需要单击两次才能工作,另一个只需单击一次
代码如下:Java onTouchListener一个ImageView需要单击两次才能工作,另一个只需单击一次,java,android,ontouchlistener,Java,Android,Ontouchlistener,代码如下: 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; Im
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;
}
}
问题是:如果我点击save按钮,它会在第一次点击时起作用。如果我点击下一步按钮,我需要点击它两次来触发该功能,但在那之后,如果我继续点击下一步按钮,它只需点击一次即可工作。但当我切换到button back时,需要单击两次,然后只单击一次,如果我切换回button next,同样的情况也会发生——两次,一次。。
我想这与专注有关
如果我将ImageView
更改为ImageButton
,它会触发函数两次,如果我添加If statemt(event.getAction()==MotionEvent.ACTION\u DOWN)
,那么我必须再次单击按钮两次。。我想让这个按钮一直只需点击一下。我不明白为什么会发生这种情况,因为“保存”按钮始终只需单击一次即可工作
编辑:如果我更改
image = imageArray[j];
到
然后,一次点击按钮就可以工作了,但我还是看不到。你真的应该使用onclick监听器 但可能是因为你没有告诉系统你已经处理了触摸事件。处理触摸事件时尝试返回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;
我刚刚意识到我将ImageCount设置为3,但在数组中它从0开始计数,我在这个应用程序的开始处编程了这个值,我认为它不会错。为什么不使用onClick Listener?“如果我将ImageView更改为ImageButton,它会触发函数两次,”如果更改为
onClick(),这是真的吗
而不是onTouch()
?bNext的else块总是导致j
相等1
。这真的是你想要的吗?我一直在搞乱我的代码,所以现在可能不是。但这不是重点。请帮助我解决双击问题,而不是其他任何问题。其他一切都很好@我以前用过onClick,结果也一样。必须单击两次。我以前使用过onClick Listener,但我被告知使用onTouch来解决我的问题,现在我被告知使用onClick,问题仍然是一样的。你的回答并不能解决我的问题,同样的情况仍然存在。
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;