在android中缩放图像

时间:2011-08-17 12:19:50

标签: android

我想在我的应用程序中添加一个像路线图图像的图像。 我想在缩放图像时为此图像添加缩放功能以及水平滚动。

我编写了一些代码,但它只允许缩放而不是滚动。

代码:

public class Zoom extends View {
    private Drawable image;
    private int zoomControler=20;
    public Zoom(Context context)
    {
            super(context);
            image=context.getResources().getDrawable(R.drawable.boothmap);
            setFocusable(true);

    }
    protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            image.setBounds((getWidth()/2)-zoomControler, (getHeight()/2)-zoomControler, (getWidth()/2)+zoomControler, (getHeight()/2)+zoomControler);
            image.draw(canvas);
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

            if(keyCode==KeyEvent.KEYCODE_DPAD_UP)// zoom in
                    zoomControler+=10;
            if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) // zoom out
                    zoomControler-=10;
            if(zoomControler<10)
                    zoomControler=10;

            invalidate();
            return true;
    }
}

你能帮我解决这个问题吗?到目前为止,我的代码是否合适,或者您有更好的代码吗?

4 个答案:

答案 0 :(得分:5)

对我有用的是:只需在webview中添加内置缩放控件,然后调用其loadDataWithBaseURL方法。

webview.getSettings().setBuiltInZoomControls(true);
webview.loadDataWithBaseURL("file:///android_asset/", "<img src='file:///android_res/drawable/example.png' />", "text/html", "utf-8", null);

答案 1 :(得分:0)

看看这篇文章: How can I get zoom functionality for images? 您必须使用webview.loadUrl(“file:// ...”)来加载图像 并激活缩放选项

答案 2 :(得分:0)

您正在修改图像边界而不是修改视图边界。尝试修改视图的高度和宽度。你应该可以滚动了。

需要覆盖onMeasure()方法并将setMeasuredDimension设置为当前高度和宽度。保持身高和宽度为成员。

编辑:

class YourView extends View {
static Bitmap mOrignalBitmap = null; // check n load in constructor.

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        setMeasuredDimension(mWidth,mHeight); 
}

@Override
protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Rect src = new Rect(0,0, originalWidth, originalHeight);
        Rect dst = new Rect(viewLeft, viewTop, viewRight, viewBottom);
        canvas.drawBitmap(mOrignalBitmap , src, dst, null);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

        if(keyCode==KeyEvent.KEYCODE_DPAD_UP)// zoom in
                zoomControler+=10;
        if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) // zoom out
                zoomControler-=10;
        if(zoomControler<10)
                zoomControler=10;
        mWidth = //set view width with zoom
        mHeight = // set view height with zoom.
        requestLayout();

        return true;
}

}

答案 3 :(得分:0)

尝试使用loadUrl处理多点触控会导致非常糟糕的结果。试试this tutorial,它提供了我发现的最佳源代码。如果你调整一下代码,你也可以在2.1上使用它。