title: LinearLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams
body: <p><strong>Explanation and solution at the bottom.</strong></p>
  
  <p>I am developing one slider layout animation, the animation work fine but when all processes end, they get next Exception.</p>
  
  <p>I guess <code>RelativeLayout</code> parent have something to do in exception, but I don't know how to resolve it.</p>
  
  <pre><code>09-06 11:24:58.952: E/Trace(30884): error opening trace file: No such file or directory (2)
  09-06 11:25:09.113: E/AndroidRuntime(30884): FATAL EXCEPTION: main
  09-06 11:25:09.113: E/AndroidRuntime(30884): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:311)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.View.measure(View.java:15264)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4916)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.View.measure(View.java:15264)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4916)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.View.measure(View.java:15264)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4916)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2161)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.View.measure(View.java:15264)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2129)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1240)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1433)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1125)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4607)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:747)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.Choreographer.doCallbacks(Choreographer.java:567)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.Choreographer.doFrame(Choreographer.java:536)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:733)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.os.Handler.handleCallback(Handler.java:615)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.os.Handler.dispatchMessage(Handler.java:92)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.os.Looper.loop(Looper.java:153)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at android.app.ActivityThread.main(ActivityThread.java:5086)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at java.lang.reflect.Method.invokeNative(Native Method)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at java.lang.reflect.Method.invoke(Method.java:511)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
  09-06 11:25:09.113: E/AndroidRuntime(30884):    at dalvik.system.NativeStart.main(Native Method)
  </code></pre>
  
  <p>activity_home.xml</p>
  
  <pre><code>&lt;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" &gt;
  
      &lt;LinearLayout
          android:id="@+id/leftView"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="#cad000"
          android:orientation="vertical" &gt;
      &lt;/LinearLayout&gt;
  
      &lt;LinearLayout
          android:id="@+id/mainView"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="#876000"
          android:orientation="vertical" &gt;
  
          &lt;LinearLayout
              android:layout_width="match_parent"
              android:layout_height="50dp"
              android:background="#cecece"
              android:orientation="horizontal" &gt;
  
              &lt;Button
                  android:id="@+id/btnSlide"
                  style="@style/btn1"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="X" /&gt;
          &lt;/LinearLayout&gt;
      &lt;/LinearLayout&gt;
  
  &lt;/RelativeLayout&gt;
  </code></pre>
  
  <p>Activity</p>
  
  <pre><code>public class HomeActivity extends Activity implements OnClickListener {
  
      UserStorage userStorage = new UserStorage();
  
      private Button btnSlide;
      private LinearLayout mainView, leftView;
      private SliderAnimation slideAnimation;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
  
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_home);
  
          this.leftView = (LinearLayout) findViewById(R.id.leftView);
          this.mainView = (LinearLayout) findViewById(R.id.mainView);
  
          this.btnSlide = (Button) findViewById(R.id.btnSlide);
          this.btnSlide.setOnClickListener(this);
  
          this.slideAnimation = new SliderAnimation(this);
  
          this.slideAnimation.initializeFilterAnimations(this.mainView, this.leftView);
      }
  
      @Override
      public void onClick(View v) {
  
          switch (v.getId()) {
  
          case R.id.btnSlide:
  
              this.slideAnimation.toggleLeftSliding();
  
              break;
          }
      }
  }
  </code></pre>
  
  <p>AnimationListener</p>
  
  <pre><code>public class SliderAnimation implements AnimationListener {
  
      private Context context;
  
      private LinearLayout mainView, leftView;
  
      private Animation mainSlideIn, mainSlideOut;
  
      private boolean leftAnimated, rightAnimated = false;
  
      private int deviceWidth;
  
      public SliderAnimation(Context context) {
  
          this.context = context;
  
          DisplayMetrics displayMetrics = context.getResources()
                  .getDisplayMetrics();
  
          this.deviceWidth = displayMetrics.widthPixels;
      }
  
      public void initializeFilterAnimations(LinearLayout mainView,
              LinearLayout leftView) {
  
          this.mainView = mainView;
          this.leftView = leftView;
  
          this.mainSlideIn = AnimationUtils.loadAnimation(context,
                  R.anim.main_slide_in);
          this.mainSlideIn.setAnimationListener(this);
  
          this.mainSlideOut = AnimationUtils.loadAnimation(context,
                  R.anim.main_slide_out);
          this.mainSlideOut.setAnimationListener(this);
      }
  
      public void toggleLeftSliding() {
  
          if (!this.leftAnimated) {
  
              this.mainView.startAnimation(this.mainSlideIn);
          } else {
  
              this.mainView.startAnimation(this.mainSlideOut);
          }
      }
  
      @Override
      public void onAnimationEnd(Animation animation) {
  
          if (!this.leftAnimated) {
  
              LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                      (this.deviceWidth * 20) / 100, this.mainView.getHeight());
  
              params.leftMargin = (this.deviceWidth * 80) / 100;
  
              this.mainView.setLayoutParams(params);
  
              this.leftAnimated = true;
          } else {
  
              LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                      this.deviceWidth, this.mainView.getHeight());
  
              params.leftMargin = 0;
  
              this.mainView.setLayoutParams(params);
  
              this.leftAnimated = false;
          }
      }
  
      @Override
      public void onAnimationRepeat(Animation animation) {
      }
  
      @Override
      public void onAnimationStart(Animation animation) {
      }
  }
  </code></pre>
  
  <p>Thank you in advance.</p>
  
  <p><strong>EXPLANATION AND SOLUTION</strong></p>
  
  <p>We've to know the parent ViewGroup container for the view, because views are filled with their parent LayoutParams for measure purposes.</p>
  
  <p>If we don't know through a simple glance on the xml which is the parent ViewGroup for the View, we can get always its reference with .getParent() method from the View instance.</p>