java - 结合两个 onTouch 事件
问题描述
对于我的应用程序,我需要结合两个 onTouch 事件。第一个我想获取 imageView 的单击像素的颜色,另一个事件应该使图片可缩放。我单独尝试了它,它似乎可以单独工作,但是当我尝试将这两个东西结合起来时,它就不再起作用了。他们为什么不一起工作?
我的代码:
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
private Bitmap bitmap;
private ScaleGestureDetector mScaleGestureDetector;
private float mScaleFactor = 1.0f;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imageView = (ImageView) findViewById(R.id.imageView);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setDrawingCacheEnabled(true);
imageView.buildDrawingCache(true);
mScaleGestureDetector = new ScaleGestureDetector(this, new ScaleListener());
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mScaleGestureDetector.onTouchEvent(event);
bitmap = imageView.getDrawingCache();
int pixel = bitmap.getPixel((int) event.getX(), (int) event.getY());
String text = "x = " + event.getX() + ", y = " + event.getY();
Log.d("Position", text);
int redValue = Color.red(pixel);
int greenValue = Color.green(pixel);
int blueValue = Color.blue(pixel);
return true;
}
});
}
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector scaleGestureDetector){
mScaleFactor *= scaleGestureDetector.getScaleFactor();
mScaleFactor = Math.max(1.0f,
Math.min(mScaleFactor, 1.7f));
imageView.setScaleX(mScaleFactor);
imageView.setScaleY(mScaleFactor);
return true;
}
}
}
解决方案
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mScaleGestureDetector.onTouchEvent(event);
bitmap = imageView.getDrawingCache();
int pixel = bitmap.getPixel((int) event.getX(), (int) event.getY());
String text = "x = " + event.getX() + ", y = " + event.getY();
Log.d("Position", text);
int redValue = Color.red(pixel);
int greenValue = Color.green(pixel);
int blueValue = Color.blue(pixel);
return false;
}
});
我想是因为你在这里消费了触摸。尝试返回 false。
推荐阅读
- php - Laravel \ Socialite \ Two \ InvalidStateException Facebook Socialite 中没有消息错误
- sandbox - 错误:未在此范围内声明“scmp_filter_ctx”
- error-handling - 无法在 IronPython 中捕获 .NET 错误
- python - numpy.dot 对大型数组有精度限制吗?
- php - 安装和使用 gnug
- jenkins - 无法使用 jenkins 设置的 perforce 票证来自动执行 perforce 登录
- javascript - 无法读取属性 'transition' null chartjs
- html - 有没有办法消除我的 CSS3 网格中的间隙,并使网格居中?
- postgresql - 在 Postgres 中处理多个并发读取查询
- mysql - MySQL Schema 建议:不可预测的字段添加