2013-04-17 41 views
1

我想放大布局機智的圖像背景和小部件像textview。我已經通過搜索並遵循一些教程來實現縮放縮放。但問題是放大布局時閃光不平滑(閃爍)。佈局縮放與小部件

那麼有沒有人有解決方案關於這個問題?或者如何順利地縮放佈局有不同的方法?

任何想法將不勝感激。

這裏是我的代碼:

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/

他們使用矩陣和帆布規模視圖。要使用它很簡單,你可以從存儲庫複製java文件到您的項目,那麼你可以這樣

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

你能不能給一個教程如何使用這個罐子? –

+0

只需從資源庫中的https://code.google.com/p/android-zoom-view/source/browse/src/pl/polidea/view/ZoomView.java下載java文件,然後將其複製到您的項目中並如何使用就像我在上面的回答中所說:) –

+0

我認爲它需要匹配或填充父窗口小部件的所有大小。包裝內容不允許 –

0

對不起它添加到您的XML視圖問一個問題,但如果你遇到這個錯誤 「自定義視圖ZOOMVIEW未使用2-或3-參數視圖構造; XML屬性將不工作「

只是在java類添加這些ZOOMVIEW

公共ZOOMVIEW(上下文語境,AttributeSet中的AttributeSet)

super(context,attributeSet);

//TODO: 

}

+0

請不要在答案中提出新的問題或澄清要求。最好把新問題作爲一個新問題(遵循SO規則)和關於這個具體問題的其他評論作爲對問題的評論。 – DanielBarbarian

+0

對不起,先生......:D –