Мне удалось создать Zoom (расширяет представление), чтобы загрузить PNG в объект Drawable и разместить его на экране с функцией масштабирования и панорамирования. Смотрите код просмотра (Zoom.java):
public class Zoom extends View {
private Drawable image;
private int zoomControler = 200;
private int shiftleft = 0;
private int shiftup = 0 ;
public float oldX = 0;
public float oldY = 0;
public Zoom(Context context) {
super(context);
image = context.getResources().getDrawable(R.drawable.androidmarker);
setFocusable(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
image.setBounds(getWidth() / 2 - zoomControler - shiftleft,
getHeight() / 2 - zoomControler - shiftup,
getWidth()/ 2 + zoomControler - shiftleft,
getHeight()/ 2 + zoomControler - shiftup);
image.draw(canvas);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_UP)
zoomControler += 10;
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN)
zoomControler -= 10;
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT)
{
shiftleft +=10;
}
if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT)
{
shiftleft-=10;
}
if (zoomControler < 10)
zoomControler = 10;
invalidate();
return true;
}
@Override
public boolean onTouchEvent(MotionEvent e) {
int action = e.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
oldX = e.getX();
oldY = e.getY();
break;
case MotionEvent.ACTION_MOVE:
shiftleft+=(int) (-(e.getX() - oldX) ) / 2;
shiftup+=(int) (-(e.getY() - oldY) / 2);
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_CANCEL:
break;
}
invalidate();
return true;
}
}
Проблема в том, как получить масштабирование по центру экрана? На данный момент центр масштабирования всегда является центром файла PNG ... Я не знаю, как изменить setBounds, чтобы получить такое поведение ... Есть идеи?
Спасибо;)