2013-12-17 3 views
0

Пожалуйста найти мой выплеск изображение в следующей ссылке: http://postimg.org/image/yvivajxov/ClassCastException в доступе layoutparams детей макеты

Я пытался создать сенсорный скроллер на основе жестов в моей деятельности, которая подстраивает размер (высоту) из макет в соответствии с жестом. В случае, если это MotionEvent.ACTION_DOWN, он должен увеличить высоту первой компоновки и уменьшить вторую.

Первоначально макеты распределены поровну на экране. Для создания макета был использован следующий xml.

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


    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/hello_world" /> 

    <LinearLayout 
     android:id="@+id/llout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <RelativeLayout 
      android:id="@+id/red_bar" 
      android:layout_height="0dp" 
      android:layout_width="match_parent" 
      android:layout_weight="1" 
      android:background="@color/red" > 
     </RelativeLayout> 

     <RelativeLayout 
      android:id="@+id/green_bar" 
      android:layout_height="0dp" 
      android:layout_width="match_parent" 
      android:layout_weight="1" 
      android:background="@color/green" > 
     </RelativeLayout> 

    </LinearLayout> 

</RelativeLayout> 

Ниже приведены глобалов:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_scroll); 
    linearLayout=(LinearLayout)findViewById(R.id.llout); 
    redPanel = (RelativeLayout)findViewById(R.id.red_bar); 
    greenPanel = (RelativeLayout)findViewById(R.id.green_bar); 

И мой код на событие выглядит следующим образом:

linearLayout.setOnTouchListener(new OnTouchListener(){ 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     // TODO Auto-generated method stub 
     final int X = (int) event.getRawX(); 
     final int Y = (int) event.getRawY(); 

     switch (event.getAction() & MotionEvent.ACTION_MASK) 
     { 
      case MotionEvent.ACTION_DOWN: 
       RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) redPanel.getLayoutParams(); 
       RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) greenPanel.getLayoutParams(); 
       _yDelta =Y - lParams.bottomMargin; 
       layoutParams.topMargin -=_yDelta; 
       lParams.bottomMargin +=_yDelta; 
       redPanel.setLayoutParams(lParams); 
       greenPanel.setLayoutParams(layoutParams); 
       Log.i("Relative LayoutParams",""+redPanel.getLayoutParams().height); 

       break; 
      case MotionEvent.ACTION_UP: 

      case MotionEvent.ACTION_POINTER_DOWN: 
      case MotionEvent.ACTION_POINTER_UP: 
      case MotionEvent.ACTION_MOVE: 

     } 
     return false; 
    }}); 
    isPanelShown=false; 

} 

и бросает следующее исключение: -

12-17 08:48:44.633: E/AndroidRuntime(29031): FATAL EXCEPTION: main 
12-17 08:48:44.633: E/AndroidRuntime(29031): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams 
12-17 08:48:44.633: E/AndroidRuntime(29031): at com.example.multifrag.ScrollAct$1.onTouch(ScrollAct.java:54) 
12-17 08:48:44.633: E/AndroidRuntime(29031): at android.view.View.dispatchTouchEvent(View.java:5624) 
12-17 08:48:44.633: E/AndroidRuntime(29031): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1964) 
12-17 08:48:44.633: E/AndroidRuntime(29031): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1725) 
12-17 08:48:44.633: E/AndroidRuntime(29031): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1970) 

Я прошел через решение prov в ответ на следующую проблему: ClassCastException LinearLayout LayoutParams

и создал табличную раскладку для доступа к reqd RelativeLayouts в качестве родительских макетов, однако он генерирует то же исключение.

+0

попробовать чистые и построить один раз – Raghunandan

ответ

0

Вы должны использовать LayoutParams родительского вида. Если вы вкладываете LinearLayout Внутри RelativeLayout вы должны использовать RelativeLayout.LayoutParams

+0

я вложенный 2 RelativeLayouts внутри LinearLayout (для вертикальной ориентации), которая сам находится в герметизации RelativeLayout.Can вы предлагаете изменения в мой код ? –

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