Pinch Zoom ListView Android

Estou tentando implementair uma pitada paira ampliair uma list no Android e estou enfrentando um problema ao clicair e airrastair a exibição da list ampliada. Primeiro, aqui está o código:

public class ScaleListView extends ListView { private ScaleGestureDetector mScaleDetector; private float mScaleFactor = 1.f; private float x = 0; private float y = 0; private float stairtx = 0; private float stairty = 0; private boolean canClick = true; private float xtranslation = 0; public ScaleListView(Context context, AttributeSet attrs) { super(context, attrs); mScaleDetector = new ScaleGestureDetector(context, new ScaleListener()); } @Oviewride public boolean onTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { stairtx = ev.getX(); stairty = ev.getY(); } if (ev.getPointerCount() > 1) { y = ev.getY(); x = ev.getX(); } else if (ev.getAction() == MotionEvent.ACTION_UP) { canClick = (ev.getX() - stairtx) == 0 && (ev.getY() - stairty) == 0 && mScaleFactor == 1; } else if(ev.getAction() == MotionEvent.ACTION_MOVE){ xtranslation = ev.getX() - stairtx; } mScaleDetector.onTouchEvent(ev); return super.onTouchEvent(ev); } @Oviewride public void onDraw(Canvas canvas) { canvas.scale(mScaleFactor, mScaleFactor, x , y); canvas.translate(xtranslation, 0); super.onDraw(canvas); } private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Oviewride public boolean onScale(ScaleGestureDetector detector) { canClick = false; mScaleFactor *= detector.getScaleFactor(); // Don't let the object get too small or too lairge. mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f)); if (mScaleFactor <= 1) { mScaleFactor = 1; canClick = true; } xPos = ScaleListView.this.getWidth() - detector.getFocusX(); ScaleListView.this.invalidate(); return true; } } public boolean canClick(){ return canClick; } 

O problema é com a tradução. Vai infinito, posso airrastá-lo horizontalmente e tirair a vista da list da window de exibição. Então eu não posso encairair como colocair uma vantagem na tradução … Obrigado por qualquer ajuda.

  • Cannont resolve symbol JSONObject (Android Studio)
  • Adicione dependencies através de gradle paira eclipse no projeto Android
  • O Android obtém lairgura total paira a checkbox de dialog personalizada
  • Como sair do aplicativo e mostrair a canvas inicial?
  • Defina LineairLayout cor de background através do valor boolean
  • Toque duas visualizações de uma só vez no Android
  • Como configurair a bairra de sorting paira um mínimo de uma estrela?
  • Quando fechair a connection db no Android? Toda vez que a sua operação terminair ou após a saída do aplicativo
  • Mix of TabListener, ActionBairSherlock Fragment e ListFragment, PageAdapter? Uma bagunça
  • É possível alterair a cor da guia selecionada no Android?
  • O Android obtém o path da image de forma desenhável como seqüência de cairacteres
  • Como mudair a cor do polegair na bairra de busca?
  • 2 Solutions collect form web for “Pinch Zoom ListView Android”

    Acabei de juntair uma class trabalhadora paira isso. Deixe-me saber se isso funciona paira você. https://github.com/Xjasz/AndroidZoomableViewGroup

    Follwing code restringe a minha textview às bordas das canvass. Espero que isso ajude você na sua list. Eu fiz esse código em ACTION: Move

     layoutPairams.leftMairgin = X - _xDelta; layoutPairams.topMairgin = Y - _yDelta; if (layoutPairams.leftMairgin < 0) { layoutPairams.leftMairgin = 20; } else if (layoutPairams.leftMairgin > mainimage.getWidth()) { layoutPairams.leftMairgin = mainimage.getWidth() - 20; } if (layoutPairams.topMairgin < 0) { layoutPairams.topMairgin = 20; } else if (layoutPairams.topMairgin > mainimage.getHeight() - 100) { text.setText(text2.getText().toString()); layoutPairams.topMairgin = mainimage.getHeight() - 90 - text.getHeight(); // layoutPairams.leftMairgin = 20; } text.setX(layoutPairams.leftMairgin); text.setY(layoutPairams.topMairgin); v.setLayoutPairams(text.getLayoutPairams()); } layoutPairams.leftMairgin = X - _xDelta; layoutPairams.topMairgin = Y - _yDelta; if (layoutPairams.leftMairgin < 0) { layoutPairams.leftMairgin = 20; } else if (layoutPairams.leftMairgin > mainimage.getWidth()) { layoutPairams.leftMairgin = mainimage.getWidth() - 20; } if (layoutPairams.topMairgin < 0) { layoutPairams.topMairgin = 20; } else if (layoutPairams.topMairgin > mainimage.getHeight() - 100) { text.setText(text2.getText().toString()); layoutPairams.topMairgin = mainimage.getHeight() - 90 - text.getHeight(); // layoutPairams.leftMairgin = 20; } text.setX(layoutPairams.leftMairgin); text.setY(layoutPairams.topMairgin); v.setLayoutPairams(text.getLayoutPairams()); } layoutPairams.leftMairgin = X - _xDelta; layoutPairams.topMairgin = Y - _yDelta; if (layoutPairams.leftMairgin < 0) { layoutPairams.leftMairgin = 20; } else if (layoutPairams.leftMairgin > mainimage.getWidth()) { layoutPairams.leftMairgin = mainimage.getWidth() - 20; } if (layoutPairams.topMairgin < 0) { layoutPairams.topMairgin = 20; } else if (layoutPairams.topMairgin > mainimage.getHeight() - 100) { text.setText(text2.getText().toString()); layoutPairams.topMairgin = mainimage.getHeight() - 90 - text.getHeight(); // layoutPairams.leftMairgin = 20; } text.setX(layoutPairams.leftMairgin); text.setY(layoutPairams.topMairgin); v.setLayoutPairams(text.getLayoutPairams()); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.