2014-09-26 83 views
0

我有一個2 LinearLayout的佈局。第一個用作包含圖形的容器,第二個包含幾個按鈕。隱藏視圖draggin up

1

當應用程序啓動時,在第一個實例,其包含圖形的LinearLayout1隱藏View.GONE

2

後來,當我從LinearLayout2輕按一鍵,使用翻譯動畫這樣的佈局可以追溯到它原來的地方。

3

最後,我不得不再次隱藏LinearLayout1的能力。我想通過拖動LinearLayout2實現此目的,所以當用戶向上移動LinearLayout2時,LinearLayouy1將再次被View.GONE隱藏。

4

最後一部分是我需要一些幫助的人。我嘗試了一些使用OnTochListener()的東西,但我沒有太多工作,我不知道如何去做。這是代碼snnipet,我這樣做:

/*Layout views*/ 
private View graphContainer; //This is the LinearLayout1 
private View valuesContainer; //This is the LinearLayout2 
private float oldY; 
private float newY; 

... 

valuesContainer.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       float y = event.getY(); 
       oldY = y; 
       break; 
      case MotionEvent.ACTION_MOVE: 
       float y2 = event.getRawY(); 
       newY = y2; 
       if (oldY < newY) { 
        graphContainer.setVisibility(View.GONE); 
       } 
       break; 
     } 
     return true; 
    } 
}); 

不同的地方我觸摸到做運動,我得到設置知名度了,但動作並不像我想,我沒有得到移動LinearLayout2。

回答

1

上面所做的是當用戶將手指向上移動時隱藏layout2。

你說「你不能移動LinearLayout2」 - >爲了移動一個視圖,你需要更新它的LayoutParams。你可以在這裏看到一個例子:How to move a view in Android?

這樣你可以「推」layout2,並在某些時候隱藏layout1(使用動畫,或者推layout1)。希望這可以幫助。

編輯(所請求的代碼示例):

BTW - animations transitions是更好的辦法時,視圖的PARAMS需要改變去。這不是你的問題的答案,因爲你想要一個真正的「拖動」感覺(當上升)。 此外 - android L has some beautiful animations(我還沒有使用),我們應該留意。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context=".MyActivity"> 

    <LinearLayout 
     android:id="@+id/first_layout" 
     android:background="@android:color/darker_gray" 
     android:layout_width="match_parent" 
     android:layout_height="100dp" > 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/second_layout" 
     android:background="@android:color/holo_green_dark" 
     android:layout_width="match_parent" 
     android:layout_height="100dp" > 
    </LinearLayout> 
</LinearLayout> 

和相應的活動如下:

public class MyActivity extends Activity { 

    int yDown = 0; 
    int initialTopMargin = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my); 

     LinearLayout layout2 = (LinearLayout)findViewById(R.id.second_layout); 

     layout2.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent event) 
      { 
       LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams(); 

       switch (event.getAction()) 
       { 
        case MotionEvent.ACTION_MOVE: 
         params.topMargin = initialTopMargin - (yDown - (int)event.getRawY()); 
         view.setLayoutParams(params); 
         break; 

        case MotionEvent.ACTION_DOWN: 
         yDown = (int)event.getRawY(); 
         initialTopMargin = params.topMargin; 
         break; 
       } 

       return true; 
      } 
     }); 
    } 
} 
+0

嗯,我不知道該怎麼說,但是你做到了,我真正需要的是將佈局2向上推,並在某個時刻隱藏layout1,將其設置爲GONE的可見性。如果您可以提供一個示例,我會接受您編輯的答案 – masmic 2014-09-26 08:57:09

+0

。請注意,我實際上並不隱藏layout1(這是可能的),也不會將其推高(也可能) - 但這應該足以讓您開始。 – 2014-09-26 10:09:39

0

如何使用onDragListener

valuesContainer.setOnDragListener(new OnDragListener() { 
    @Override 
    public boolean onDrag(View v, MotionEvent event) { 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       float y = event.getY(); 
       oldY = y; 
       break; 
      case MotionEvent.ACTION_MOVE: 
       float y2 = event.getRawY(); 
       newY = y2; 
       if (oldY < newY) { 
        graphContainer.setVisibility(View.GONE); 
       } 
       break; 
     } 
     return true; 
    } 
}); 
+0

我改變了我的方法與你,但Linearlayout2不動既不linearLayout1使用佈局如下

所以... get的GONE – masmic 2014-09-26 08:49:10