ScaleGetStureDetector不工作不显示任何内容 FullOffer.java package com.synergywebdesigners.veebee; 导入android.content.Intent; 导入android.graphics.Matrix; 导入android.support.v7.app.AppActivity; 导入android.os.Bundle; 导入android.text.Html; 导入android.view.MotionEvent; 导入android.view.scalegestruedetector; 导入android.widget.ImageView; 导入android.widget.TextView; 导入android.widget.Toast; 导入com.squareup.picasso.picasso; 公共类FullOffer扩展了AppCompative活动{ 图像视图图像; 文本视图开始、结束、标题、消息; 浮标=1f; scalegestruedetector SDG; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity\u full\u offer); start=(TextView)findViewById(R.id.start); end=(TextView)findViewById(R.id.end); title=(TextView)findViewById(R.id.title); messages=(TextView)findViewById(R.id.message); image=(ImageView)findViewById(R.id.imageDownloaded); Intent i=getIntent(); setTitle(i.getStringExtra(“title”);//应用程序的标题 start.setText(i.getStringExtra(“start”)); end.setText(即getStringExtra(“end”)); title.setText(即getStringExtra(“标题”)); messages.setText(Html.fromHtml(i.getStringExtra(“message”)),TextView.BufferType.Spanable); Picasso.with(FullOffer.this).load(Config.UPLOAD_LOCATION+i.getStringExtra(“图像”)).fit()到(图像)中; SDG=新的scalegestruedetector(这是新的ScaleListner()); } @凌驾 公共布尔onTouchEvent(运动事件){ SDG.onTouchEvent(事件); /*返回true*/ 返回super.onTouchEvent(事件); } 私有类ScaleListener扩展了ScaleGStrueDetector.SimpleOnScaleGStrueListener{ scalebegin上的float=0; scaleend上的float=0; @凌驾 公共布尔标度(scalegestruedetector检测器){ /*scale=scale*detector.getScaleFactor(); 比例=数学最大值(0.1f,数学最小值(比例,5f)); 矩阵。设置刻度(刻度,刻度); image.setImageMatrix(矩阵)*/ scale*=检测器。getScaleFactor(); 图像。设置刻度(刻度); 图像。设置比例(比例); 返回true; } @凌驾 公共布尔onScaleBegin(ScaleGetStereDetector检测器){ Toast.makeText(getApplicationContext(),“您的应用程序夹点”,Toast.LENGTH\u SHORT.show(); onScaleBegin=规模; 返回true; } @凌驾 标度仪上的公共空隙(标度仪检测器){ onScaleEnd=规模; 如果(onScaleEnd>onScaleBegin){ Toast.makeText(getApplicationContext(),“按”+String.valueOf(onScaleEnd/onScaleBegin)缩放),Toast.LENGTH\u SHORT.show(); }否则,如果(按比例)

ScaleGetStureDetector不工作不显示任何内容 FullOffer.java package com.synergywebdesigners.veebee; 导入android.content.Intent; 导入android.graphics.Matrix; 导入android.support.v7.app.AppActivity; 导入android.os.Bundle; 导入android.text.Html; 导入android.view.MotionEvent; 导入android.view.scalegestruedetector; 导入android.widget.ImageView; 导入android.widget.TextView; 导入android.widget.Toast; 导入com.squareup.picasso.picasso; 公共类FullOffer扩展了AppCompative活动{ 图像视图图像; 文本视图开始、结束、标题、消息; 浮标=1f; scalegestruedetector SDG; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity\u full\u offer); start=(TextView)findViewById(R.id.start); end=(TextView)findViewById(R.id.end); title=(TextView)findViewById(R.id.title); messages=(TextView)findViewById(R.id.message); image=(ImageView)findViewById(R.id.imageDownloaded); Intent i=getIntent(); setTitle(i.getStringExtra(“title”);//应用程序的标题 start.setText(i.getStringExtra(“start”)); end.setText(即getStringExtra(“end”)); title.setText(即getStringExtra(“标题”)); messages.setText(Html.fromHtml(i.getStringExtra(“message”)),TextView.BufferType.Spanable); Picasso.with(FullOffer.this).load(Config.UPLOAD_LOCATION+i.getStringExtra(“图像”)).fit()到(图像)中; SDG=新的scalegestruedetector(这是新的ScaleListner()); } @凌驾 公共布尔onTouchEvent(运动事件){ SDG.onTouchEvent(事件); /*返回true*/ 返回super.onTouchEvent(事件); } 私有类ScaleListener扩展了ScaleGStrueDetector.SimpleOnScaleGStrueListener{ scalebegin上的float=0; scaleend上的float=0; @凌驾 公共布尔标度(scalegestruedetector检测器){ /*scale=scale*detector.getScaleFactor(); 比例=数学最大值(0.1f,数学最小值(比例,5f)); 矩阵。设置刻度(刻度,刻度); image.setImageMatrix(矩阵)*/ scale*=检测器。getScaleFactor(); 图像。设置刻度(刻度); 图像。设置比例(比例); 返回true; } @凌驾 公共布尔onScaleBegin(ScaleGetStereDetector检测器){ Toast.makeText(getApplicationContext(),“您的应用程序夹点”,Toast.LENGTH\u SHORT.show(); onScaleBegin=规模; 返回true; } @凌驾 标度仪上的公共空隙(标度仪检测器){ onScaleEnd=规模; 如果(onScaleEnd>onScaleBegin){ Toast.makeText(getApplicationContext(),“按”+String.valueOf(onScaleEnd/onScaleBegin)缩放),Toast.LENGTH\u SHORT.show(); }否则,如果(按比例),java,android,xml,Java,Android,Xml,火山口(…) 不是每次都调用它,-仅当视图不处理onTouch事件时才会调用它: 您应该使用dispatchTouchEvent(MotionEvent事件) 或者您可以实现View.OnTouchListener 注册当触摸事件发送到此视图时要调用的回调 image.setOnTouchListener(this); 和覆盖 @Override onTouch(View v, MotionEvent event) public boolean onTouch(View v, M

火山口(…)

不是每次都调用它,-仅当视图不处理onTouch事件时才会调用它: 您应该使用
dispatchTouchEvent(MotionEvent事件)

或者您可以实现
View.OnTouchListener

注册当触摸事件发送到此视图时要调用的回调

image.setOnTouchListener(this);
和覆盖

   @Override onTouch(View v, MotionEvent event)
    public boolean onTouch(View v, MotionEvent event) {
        return SDG.onTouchEvent(event);
    }
请参阅下面的链接,以更清楚地了解触摸事件


看起来我可能也有同样的问题

scalegestruedetector
仅当它接收到的事件多于传递给它的
ACTION\u DOWN
时才起作用

如果在
onTouchEvent

 @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        return SDG.onTouchEvent(event);
    }
super可能返回
false
,这意味着您将不会再收到给定手势的任何触摸事件(例如
ACTION\u MOVE
ACTION\u UP

如果您的
onTouchEvent
返回
true
,您将收到
scalegestruedetector
工作所需的所有事件

例如:

override fun onTouchEvent(event: MotionEvent?): Boolean {
    mScaleDetector.onTouchEvent(event)
    return true
}

private val mScaleDetector = ScaleGestureDetector(context, object : ScaleGestureDetector.SimpleOnScaleGestureListener() {
    override fun onScale(detector: ScaleGestureDetector): Boolean {
        Log.d("TAG", "Pinch detected")
        return true
    }
})

警告-请小心,如果您不调用super,则将不会再调用父级。如果您不调用super,则将不再调用父级。

Bro我已经面临此类问题。任何人都可以帮助我们我尝试您的代码,我希望它能起作用。非常感谢您,但当图像缩放而不是滚动时,仍然有一个大问题
   @Override onTouch(View v, MotionEvent event)
    public boolean onTouch(View v, MotionEvent event) {
        return SDG.onTouchEvent(event);
    }
override fun onTouchEvent(event: MotionEvent?): Boolean {
    mScaleDetector.onTouchEvent(event)
    return true
}

private val mScaleDetector = ScaleGestureDetector(context, object : ScaleGestureDetector.SimpleOnScaleGestureListener() {
    override fun onScale(detector: ScaleGestureDetector): Boolean {
        Log.d("TAG", "Pinch detected")
        return true
    }
})