2

我有以下代码可以翻转页面但显示相同的布局和相同的活动我想在按下按钮时更改此代码显示另一个具有不同布局的屏幕怎么可能?下面给出的源代码

 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>
4

4 回答 4

2

setContentView在您的 onclicklistener 方法上使用,例如:

setContentView(R.layout.layout);

编辑:我想你想要什么时候btnRotateit按下然后你想要显示relChild1relChild2然后再次按下btnRotateBack然后出现mContainer,然后试试:

btnRotateit在onclick 方法上添加代码:

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

btnRotateBack并在onclick 方法上添加代码:

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

试试这个,让我知道。

于 2012-07-30T08:37:03.853 回答
1
onClick(View v)
{
    setContentView(R.layout.another);
                            ^^^^^^^ 
}

编辑: 例如你有两个视图,你可以设置可见性INVISIBLEGONE

并在 onClick 中应用旋转并更改组件的可见性

于 2012-07-30T08:21:47.480 回答
1

从您对 vishwa 的回复来看,您似乎不想更改现有活动的布局,而是更改为另一个活动。在哪个追逐中:

Intent intent = new Intent(this, secondpage.class);
startActivity(intent);
于 2012-07-30T08:39:07.580 回答
0

检查此代码

 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);
   }
});
于 2012-07-30T08:24:10.587 回答