我想在我的应用程序中添加一个像路线图图像的图像。 我想在缩放图像时为此图像添加缩放功能以及水平滚动。
我编写了一些代码,但它只允许缩放而不是滚动。
代码:
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;
}
}
你能帮我解决这个问题吗?到目前为止,我的代码是否合适,或者您有更好的代码吗?
答案 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上使用它。