2013-04-17 5 views
1

이미지 배경 및 텍스트 뷰와 같은 위젯을 사용하여 레이아웃을 확대/축소하려고합니다. 나는 이미 자습서를 검색하고 따라줌으로써 집기 확대를 구현했다. 그러나 문제는 레이아웃을 확대/축소 할 때 (부드럽게 깜박임) 부드럽 지 않다는 것입니다.레이아웃 위젯을 사용하여 확대/축소

그렇다면 해결책이있는 사람이 있습니까? 또는 레이아웃을 부드럽게 줌하는 방법이 다른가요?

모든 의견을 높이 평가할 것입니다.

public class ZoomActivity extends Activity { 

    View mainView = null; 
    PointF start = new PointF(); 
    PointF mid = new PointF(); 
    float oldDist = 1f; 
    PointF oldDistPoint = new PointF(); 

    public static String TAG = "ZOOM"; 

    static final int NONE = 0; 
    static final int DRAG = 1; 
    static final int ZOOM = 2; 
    int mode = NONE; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.landingpage); 
     mainView = (LinearLayout) findViewById(R.id.linear); 

     mainView.setOnTouchListener(new OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       Log.d(TAG, "mode=DRAG"); 
       switch (event.getAction() & MotionEvent.ACTION_MASK) { 
       case MotionEvent.ACTION_DOWN: 
        start.set(event.getX(), event.getY()); 
        Log.d(TAG, "mode=DRAG"); 
        mode = DRAG; 

        break; 
       case MotionEvent.ACTION_POINTER_DOWN: 
        oldDist = spacing(event); 
        oldDistPoint = spacingPoint(event); 
        Log.d(TAG, "oldDist=" + oldDist); 
        if (oldDist > 10f) { 
         midPoint(mid, event); 
         mode = ZOOM; 
         Log.d(TAG, "mode=ZOOM"); 
        } 
        System.out.println("current time :" 
          + System.currentTimeMillis()); 
        break;// return !gestureDetector.onTouchEvent(event); 
       case MotionEvent.ACTION_UP: 
       case MotionEvent.ACTION_POINTER_UP: 
        Log.d(TAG, "mode=NONE"); 
        mode = NONE; 
        break; 
       case MotionEvent.ACTION_MOVE: 
        if (mode == DRAG) { 

        } else if (mode == ZOOM) { 
         PointF newDist = spacingPoint(event); 
         float newD = spacing(event); 
         Log.e(TAG, "newDist=" + newDist); 
         float[] old = new float[9]; 
         float[] newm = new float[9]; 
         Log.e(TAG, "x=" + old[0] + ":&:" + old[2]); 
         Log.e(TAG, "y=" + old[4] + ":&:" + old[5]); 
         float scale = newD/oldDist; 
         float scalex = newDist.x/oldDistPoint.x; 
         float scaley = newDist.y/oldDistPoint.y; 
         zoom(scale, scale, start); 
        } 
        break; 
       } 
       return true; 
      } 
     }); 
    } 

    /** 
    * zooming is done from here 
    */ 
    public void zoom(Float scaleX, Float scaleY, PointF pivot) { 
     mainView.setPivotX(pivot.x); 
     mainView.setPivotY(pivot.y); 
     mainView.setScaleX(scaleX); 
     mainView.setScaleY(scaleY); 
    } 

    /** 
    * space between the first two fingers 
    */ 
    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 PointF spacingPoint(MotionEvent event) { 
     PointF f = new PointF(); 
     f.x = event.getX(0) - event.getX(1); 
     f.y = event.getY(0) - event.getY(1); 
     return f; 
    } 

    /** 
    * the mid point of the first two fingers 
    */ 
    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); 
    } 

} 

답변

1

당신이 zoomview을 시도 할 수 있습니다 ->https://code.google.com/p/android-zoom-view/

그들은보기를 확장 할 매트릭스와 캔버스를 사용

여기 내 코드입니다. 당신이 오류 "사용자 정의가 발생하는 경우 다음 질문을이

<yourpackagename.ZoomvView> 
    //place your view that want to be zoomed here 
</yourpackagename.ZoomvView> 
+0

당신이 어떻게 병을 사용하는 튜토리얼을 줄 수 있습니까? –

+0

저장소의 java 파일을 https://code.google.com/p/android-zoom-view/source/browse/src/pl/polidea/view/ZoomView.java에서 다운로드 한 다음 프로젝트에 복사하고 사용 방법은 위의 대답에서 말한 것과 같습니다 :) –

+0

위젯의 모든 크기와 일치하거나 채울 부모가 있어야한다고 생각합니다. 내용 감싸기가 허용되지 않습니다 –

0

죄송처럼 XML 뷰에 추가 할 수 있지만, 당신은 당신의 프로젝트에 저장소에서 자바 파일을 복사 할 수 있습니다 매우 간단 사용하려면 보기 ZoomView은 2 또는 3 인수보기 생성자를 사용하지 않는, XML은

그냥 자바 클래스에서 다음을 추가 "작동하지 않습니다 속성 ZoomView

공공 ZoomView (컨텍스트 컨텍스트 속성 세트, 속성)

{ super (context, attributeSet);

//TODO: 

}

+0

새로운 질문이나 답변을 명확히하기위한 요청을 답안에 넣지 마십시오. 새로운 질문을 (SO 규칙에 따라) 새로운 질문을 넣는 것이 낫습니다. 그리고이 특정 질문에 관한 의견은 질문에 대한 의견으로 쓰는 것이 낫습니다. – DanielBarbarian

+0

죄송합니다 ... 선생님 : D –

관련 문제