2014-04-23 4 views
0

Как реализовать масштабируемые изображения, которые находятся в фрагментах?Как ущипнуть масштаб фрагмента андроида

У меня есть следующие коды для масштабирования изображения:

ImageView imageDetail; 
Matrix matrix = new Matrix(); 
Matrix savedMatrix = new Matrix(); 
PointF startPoint = new PointF(); 
PointF midPoint = new PointF(); 
float oldDist = 1f; 
static final int NONE = 0; 
static final int DRAG = 1; 
static final int ZOOM = 2; 
int mode = NONE; 

imageDetail = (ImageView) findViewById(R.id.imageView1); 
/** 
* set on touch listner on image 
*/ 
imageDetail.setOnTouchListener(new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     ImageView view = (ImageView) v; 
     System.out.println("matrix=" + savedMatrix.toString()); 
     switch (event.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_DOWN: 

      savedMatrix.set(matrix); 
      startPoint.set(event.getX(), event.getY()); 
      mode = DRAG; 
      break; 

     case MotionEvent.ACTION_POINTER_DOWN: 

      oldDist = spacing(event); 

      if (oldDist > 10f) { 
       savedMatrix.set(matrix); 
       midPoint(midPoint, event); 
       mode = ZOOM; 
      } 
      break; 

     case MotionEvent.ACTION_UP: 

     case MotionEvent.ACTION_POINTER_UP: 
      mode = NONE; 

      break; 

     case MotionEvent.ACTION_MOVE: 
      if (mode == DRAG) { 
       matrix.set(savedMatrix); 
       matrix.postTranslate(event.getX() - startPoint.x, event.getY() - startPoint.y); 
      } else if (mode == ZOOM) { 
       float newDist = spacing(event); 

       if (newDist > 10f) { 
        matrix.set(savedMatrix); 
        float scale = newDist/oldDist; 
        matrix.postScale(scale, scale, midPoint.x, midPoint.y); 
       } 
      } 
      break; 
     } 
     view.setImageMatrix(matrix); 

     return true; 
    } 

    @SuppressLint("FloatMath") 
    private float spacing(MotionEvent event) { 
     float x = event.getX(0) - event.getX(1); 
     float y = event.getY(0) - event.getY(1); 
     return FloatMath.sqrt(x * x + y * y); 
    } 

    private void midPoint(PointF point, MotionEvent event) { 
     float x = event.getX(0) + event.getX(1); 
     float y = event.getY(0) + event.getY(1); 
     point.set(x/2, y/2); 
    } 
}); 

Вышеуказанные коды прекрасно работает на деятельности, но не на фрагменте. Пожалуйста помоги! Нужно это срочно!

+0

Конечно, это работает, вы просто не можете скопировать и вставить его. – ElDuderino

+0

Привет @ElDuderino, что вы подразумеваете под копией и вставляете его? Извините, я новичок в android. Разум объясняет, что вы имеете в виду? – user3563547

+0

Что я имел в виду, когда он работает в своей деятельности, он также будет работать во фрагменте ... но вам нужно немного его адаптировать. Разум, объясняющий, что вы имеете в виду, «работает не на фрагменте» ... что такое ошибка? – ElDuderino

ответ

0

вам нужно изменить эту линию

imageDetail = (ImageView) findViewById(R.id.imageView1); 

для этого одного

imageDetail = (ImageView) rootView.findViewById(R.id.imageView1); 

где rootView это имя, которое вы дали View во фрагменте (обычно rootview)

Смежные вопросы