Пожалуйста найти мой выплеск изображение в следующей ссылке: 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 в качестве родительских макетов, однако он генерирует то же исключение.
попробовать чистые и построить один раз – Raghunandan