Sincere Friend
Sincere Friend

Reputation: 31

how can i show another layout when button pressed?

i have a following code which flip the page but is show same layout and same activity i want to change this code when button press its show another screen with diffrent layout how it is possible? source code given below

 package com.samir;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AccelerateInterpolator;
import android.widget.Button;
import android.widget.RelativeLayout;

import com.samir.anim.DisplayNextView;
import com.samir.anim.Rotate3dAnimation;

 public class MainActivity extends Activity implements OnClickListener {

Button btnRotateit, btnRotateBack;
RelativeLayout mContainer, relChild1, relChild2;
private boolean isFirstView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mContainer = (RelativeLayout) findViewById(R.id.mainlayout);
    relChild1 = (RelativeLayout) findViewById(R.id.child1);
    relChild2 = (RelativeLayout) findViewById(R.id.child2);

    btnRotateit = (Button) findViewById(R.id.btnrotate);
    btnRotateit.setOnClickListener(this);
    btnRotateBack = (Button) findViewById(R.id.btnback);
    btnRotateBack.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    switch (view.getId()) {
    case R.id.btnrotate:
        isFirstView = true;
        applyRotation(0, 90);
        break;
    case R.id.btnback:
        isFirstView = false;
        applyRotation(0, -90);
        break;
    default:
        break;
    }

}

private void applyRotation(float start, float end) {
    final float centerX = mContainer.getWidth() / 2.0f;
    final float centerY = mContainer.getHeight() / 2.0f;

    // The animation listener is used to trigger the next animation
    final Rotate3dAnimation rotation = new Rotate3dAnimation(start, end,
            centerX, centerY, 310.0f, true);
    rotation.setDuration(1200);
    rotation.setFillAfter(true);
    rotation.setInterpolator(new AccelerateInterpolator());
    rotation.setAnimationListener(new DisplayNextView(isFirstView,
            mContainer, relChild1, relChild2));

    mContainer.startAnimation(rotation);

}
     }



  package com.samir.anim;

  import android.view.View;
 import android.view.animation.Animation;
 import android.view.animation.Animation.AnimationListener;
 import android.view.animation.DecelerateInterpolator;
 import android.widget.RelativeLayout;

 public class DisplayNextView implements AnimationListener {
RelativeLayout mContainer, relChild1, relChild2;
boolean isFirstView;

public DisplayNextView(boolean isFirstView, RelativeLayout mContainer,
        RelativeLayout relChild1, RelativeLayout relChild2) {
    this.mContainer = mContainer;
    this.relChild1 = relChild1;
    this.relChild2 = relChild2;

    this.isFirstView = isFirstView;
}

@Override
public void onAnimationEnd(Animation animation) {
    mContainer.post(new SwapViews());
}

@Override
public void onAnimationRepeat(Animation animation) {
}

@Override
public void onAnimationStart(Animation animation) {
}

public class SwapViews implements Runnable {
    @Override
    public void run() {

        final float centerX = mContainer.getWidth() / 2.0f;
        final float centerY = mContainer.getHeight() / 2.0f;
        Rotate3dAnimation rotation;

        if (isFirstView) {
            rotation = new Rotate3dAnimation(-90, 0, centerX, centerY,
                    310.0f, false);
        } else {
            rotation = new Rotate3dAnimation(90, 0, centerX, centerY,
                    310.0f, false);
        }
        rotation.setDuration(1500);
        rotation.setFillAfter(true);
        rotation.setInterpolator(new DecelerateInterpolator());

        mContainer.startAnimation(rotation);

        if (isFirstView) {
            relChild1.setVisibility(View.GONE);
            relChild2.setVisibility(View.VISIBLE);
        } else {
            relChild2.setVisibility(View.GONE);
            relChild1.setVisibility(View.VISIBLE);

        }
    }

}

   }




    package com.samir.anim;

 import android.graphics.Camera;
   import android.graphics.Matrix;
  import android.view.animation.Animation;
import android.view.animation.Transformation;

 public class Rotate3dAnimation extends Animation {
private final float mFromDegrees;
private final float mToDegrees;
private final float mCenterX;
private final float mCenterY;
private final float mDepthZ;
private final boolean mReverse;
private Camera mCamera;

public Rotate3dAnimation(float fromDegrees, float toDegrees, float centerX,
        float centerY, float depthZ, boolean reverse) {
    mFromDegrees = fromDegrees;
    mToDegrees = toDegrees;
    mCenterX = centerX;
    mCenterY = centerY;
    mDepthZ = depthZ;
    mReverse = reverse;
}

@Override
public void initialize(int width, int height, int parentWidth,
        int parentHeight) {
    super.initialize(width, height, parentWidth, parentHeight);
    mCamera = new Camera();
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    final float fromDegrees = mFromDegrees;
    float degrees = fromDegrees
            + ((mToDegrees - fromDegrees) * interpolatedTime);

    final float centerX = mCenterX;
    final float centerY = mCenterY;
    final Camera camera = mCamera;

    final Matrix matrix = t.getMatrix();

    camera.save();
    if (mReverse) {
        camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);
    } else {
        camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));
    }
    camera.rotateY(degrees);
    camera.getMatrix(matrix);
    camera.restore();

    matrix.preTranslate(-centerX, -centerY);
    matrix.postTranslate(centerX, centerY);
}
        }


       <?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#DCDCDC"
android:orientation="vertical" >

 <RelativeLayout
    android:id="@+id/child1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <Button
        android:id="@+id/btnrotate"
        android:layout_width="170dp"
        android:layout_height="40dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@drawable/btnrotate"
        android:text="@string/rotateit" />
 </RelativeLayout>

 <RelativeLayout
    android:id="@+id/child2"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:visibility="gone" >

    <Button
        android:id="@+id/btnback"
        android:layout_width="170dp"
        android:layout_height="40dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@drawable/btnback"
        android:text="@string/rotateback" />
     </RelativeLayout>

      </RelativeLayout>

Upvotes: 2

Views: 22791

Answers (4)

Rahul Patel
Rahul Patel

Reputation: 3843

use the setContentView on your onclicklistener method Like :

setContentView(R.layout.layout);

EDIT: I think you want when btnRotateit is press then you want to display relChild1 and relChild2 and again press btnRotateBack then appear the mContainer, Then Try like:

Add the code on the btnRotateit onclick Method :

relChild1.setVisibility(View.VISIBLE);
relChild2.setVisibility(View.VISIBLE);
mContainer.setVisibility(View.GONE);

and Add the code on the btnRotateBack onclick Method :

relChild1.setVisibility(View.GONE);
relChild2.setVisibility(View.GONE);
mContainer.setVisibility(View.VISIBLE);

Try this one and Let me know.

Upvotes: 2

Sparky
Sparky

Reputation: 8477

From your response to vishwa, it looks like you don't want to change the layout of your existing activity so much as to change to another activity. In which chase:

Intent intent = new Intent(this, secondpage.class);
startActivity(intent);

Upvotes: 1

MAC
MAC

Reputation: 15847

onClick(View v)
{
    setContentView(R.layout.another);
                            ^^^^^^^ 
}

EDIT : For example you have two view, you can set visibility INVISIBLE or GONE

and in onClick apply rotation and change visibility of components

Upvotes: 1

Vishwanath.M
Vishwanath.M

Reputation: 6317

check this code

 private View view = null ;
 Button addbutton = null;
 ViewGroup parent = null;
 LayoutInflater inflater = null;

 inflater= (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
 addbutton = (Button)findViewById(R.id.btnAdd);

 parent = (ViewGroup) findViewById(R.id.mainxml);


 addbutton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        view = inflater.inflate(R.layout.other, null);
        parent.addView(view);
   }
});

Upvotes: 0

Related Questions