Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法在画布中平移和缩放图像_Android_Zooming_Panning - Fatal编程技术网

Android 无法在画布中平移和缩放图像

Android 无法在画布中平移和缩放图像,android,zooming,panning,Android,Zooming,Panning,我正在尝试使用画布显示图像,该画布允许缩放和平移,但会阻止用户在屏幕外平移图像。我已经能够停止平移,但当图片被缩放时,它会在图像边缘之前停止。我需要能够平移到图像的边缘,甚至放大。任何帮助都将不胜感激 显示图像、停止屏幕外平移和缩放的我的代码: @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.save(); if (mPosX &

我正在尝试使用画布显示图像,该画布允许缩放和平移,但会阻止用户在屏幕外平移图像。我已经能够停止平移,但当图片被缩放时,它会在图像边缘之前停止。我需要能够平移到图像的边缘,甚至放大。任何帮助都将不胜感激

显示图像、停止屏幕外平移和缩放的我的代码:

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.save();

        if (mPosX < displayWidth - mIcon.getIntrinsicWidth()){
            mPosX = displayWidth - mIcon.getIntrinsicWidth();}
        if (mPosX > 0){
            mPosX = 0; }
        if (mPosY < displayHeight - mIcon.getIntrinsicHeight()){
            mPosY = displayHeight - mIcon.getIntrinsicHeight();}
        if (mPosY > 0){
            mPosY = 0; }

        canvas.translate(mPosX, mPosY);
        canvas.scale(mScaleFactor, mScaleFactor);
        mIcon.draw(canvas);
        canvas.restore();
    }

    private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
        @Override
        public boolean onScale(ScaleGestureDetector detector) {
            mScaleFactor *= detector.getScaleFactor();

            // Don't let the object get too small or too large.
            mScaleFactor = Math.max(0.42f, Math.min(mScaleFactor, 5.0f));

            invalidate();
            return true;
        }
    }
@覆盖
公共空白onDraw(画布){
super.onDraw(帆布);
canvas.save();
if(mPosX0){
mPosX=0;}
if(mPosY0){
mPosY=0;}
canvas.translate(mPosX,mPosY);
canvas.scale(mScaleFactor,mScaleFactor);
绘画(画布);
canvas.restore();
}
私有类ScaleListener扩展了scalegestruedetector.SimpleOnScalegestrueListener{
@凌驾
公共布尔标度(scalegestruedetector检测器){
mScaleFactor*=detector.getScaleFactor();
//不要让对象变得太小或太大。
mScaleFactor=数学最大值(0.42f,数学最小值(mScaleFactor,5.0f));
使无效();
返回true;
}
}

与此非常相似:

您是否在重新编写谷歌博客上的代码?而且,剪切mPosX/Y是什么呢?是的,我主要是在重新编写代码。mPosX/Y>0使图像保留在屏幕顶部和左侧图像边框上。另一个mPosX/Y部分尝试沿图像的右边框和下边框将图像保留在屏幕中,但放大时失败。类似。我尝试过使用Rect,当我平移图像时效果很好,但我无法让图像在其中缩放,甚至使用矩阵。有什么建议吗?Matrix.postScale是你的朋友。你现在该学数学了。