java - 合并两个 onTouch 事件

标签 java android

对于我的应用程序,我需要组合两个 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。

关于java - 合并两个 onTouch 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51848959/

相关文章:

java - Android 中的 P2P 音频共享

android - 如何将复制的文本传递给 Android 中的其他 Activity

android - 尝试使用 Dagger 解决依赖循环

html - android HTML 模板作为资源

java - HttpClientErrorException getResponseBodyAsString() 无法将字节解析为字符串

java - 在 JUnit Jupiter 中使用自定义组合注释时获取 @Autowired bean 的 NPE

java - 无法连接到 RMI 注册表

java - 如何将文本文件转换为arff文件?

java - 如何为gson方法创建对象工厂方法?

android - 在 Android 中有效地缓存数据上传