2012-05-04 114 views
0

我想設置一個限制可滾動圖像的x和y範圍。這裏是我使用的代碼:Android:極限佈局滾動範圍

public class MapActivity extends Activity { 


private LinearLayout container; 
private int currentX; 
private int currentY; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.map); 
    container = (LinearLayout) findViewById(R.id.Container); 

    container.scrollTo(0, 0); 

} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: { 
      currentX = (int) event.getRawX(); 
      currentY = (int) event.getRawY(); 
      break; 
     } 

     case MotionEvent.ACTION_MOVE: { 
      int x2 = (int) event.getRawX(); 
      int y2 = (int) event.getRawY(); 
      container.scrollBy(currentX - x2 , currentY - y2); 
      currentX = x2;    
      currentY = y2; 
      break; 
     }  
     case MotionEvent.ACTION_UP: { 
      break; 
     } 
    } 
    return true; 
} 


} 

而我的map.xml看起來像這樣。

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center"> 
    <LinearLayout 
     android:id="@+id/Container" 
     android:layout_height="fill_parent"   
     android:layout_width="fill_parent"> 
    <ImageView 
     android:id="@+id/imageView1" 
     android:src="@drawable/aowmap"   
     android:layout_height="752px" 
     android:layout_width="1712px"></ImageView> 
    </LinearLayout> 
</LinearLayout> 

我試過各種方法來獲得「容器」的X和Y,甚至圖像X和Y,但沒有運氣。我確信代碼會在ACTION_UP下,但我不知道該如何找到x和y。

回答

0

您需要查看顯示指標,以下是我在圖庫中用來限制滾動的代碼片段,您應該可以做類似的事情!

重點線爲mlp.setMargins(...),傳遞給函數的第一個參數是我設置新的左旁所以你需要做同樣的事情,但對於底部邊緣!

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 
MarginLayoutParams mlp = (MarginLayoutParams) gallery.getLayoutParams(); 
mlp.setMargins(-(metrics.widthPixels/2+130),mlp.topMargin,mlp.rightMargin, mlp.bottomMargin); 

希望這有助於! :)

+0

是的,我不完全確定這是如何幫助。我只是沒有看到它。我嘗試過使用「x = container.getTop()」,但是這總是返回0 ...只需要找到佈局的當前x和y的方法... – cerealspiller

+0

我發佈的代碼將限制用戶可以滾動到的區域 - 是不是你想要的?也許我誤解了 - 如果這種情況可能是你想要達到的效果的一個方面的圖表 – Kenny

+0

我很新,所以我不確定這個代碼是如何實現的。編輯:我會嘗試查看DisplayMetrics,看看我能否找到一些教程。 – cerealspiller