我正在尝试按照 https://www.youtube.com/watch?v=X2ls3FTPOAc 中的教程来放大我在imageview中的drawable。
我在这里看到scaleListener对象被调用,因为Log输出它被调用。但是,当我对图像视图使用ImageView.ScaleType.MATRIX比例类型时,它似乎不起作用。我还在onScale方法中添加了一些修改。这是我的代码:
view1.setScaleType(ImageView.ScaleType.MATRIX); //using CENTER works
Matrix matrix = new Matrix();
view1.setImageMatrix(matrix);
DummyDraw drawD = new DummyDraw(this);
view1.setImageDrawable(drawD);
scaleGestureDetector = new ScaleGestureDetector(this, new ScaleListener());
我有几种方法:
public boolean onTouchEvent(MotionEvent event){
scaleGestureDetector.onTouchEvent(event);
return true; }
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener{
public boolean onScale(ScaleGestureDetector detector) {
Log.d("inside1044","inside scale listener onSscale method ");
float scaleFactor = detector.getScaleFactor();
scaleFactor = Math.max(0.1f, Math.min(scaleFactor,5.0f));
scaleFactor2 = scaleFactor;//a modification I made
matrix.setScale(scaleFactor,scaleFactor);
view1.invalidateDrawable(view1.getDrawable());//this is the modification I made
return true;}
}
现在,DummyDraw类扩展了Drawable,它只在画布中间绘制了一个粉红色的背景和一个圆圈。变量scaleFactor2是静态的并且在MainActivity中定义,因此每次用户触摸视图时,调用onScale方法都会更新scaleFactor2的新值。我以某种方式使用此scaleFactor2值来尝试缩放可绘制对象的画布。这里是onDraw()中的可绘制对象内部代码的样子:
//define some variables to get the center of the canvas
canvas.save();
canvas.scale(MainActivity.scaleFactor2,MainActivity.scaleFactor2);
//draw the circle to the screen
canvas.restore();
当我将两根手指放在屏幕上并将它们拉得更近时,圆圈会跳跃并略微移动,但是当我将手指移开时,没有任何事情发生。请记住,仅当ImageView.ScaleType设置为CENTER而不是MATRIX时才有效。
我正在尝试平滑放大和缩小视图。
任何想法都会受到赞赏。