2012-07-30 4 views
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> 

답변

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

편집 : 예를 들어 두보기, 당신은 가시성을 설정할 수 있습니다 INVISIBLE 또는

및 구성 요소의 회전과 변화 가시성을 적용 온 클릭에 GONE

+0

하지만 어떻게 내가 코드가 폭발 여기 bcoz되어 작동하지 않습니다 그것을 시도 DisplayNextView (부울 isFirstView, RelativeLayout의 mContainer, RelativeLayout의 relChild1, RelativeLayout의 relChild2) { 기능 –

+0

ublic 에 diffrent 레이아웃 값을 사용하는 1 개의 부모 레이아웃과 2 개의 자식 레이아웃 어떻게이 코드에서 2 개의 다른 레이아웃을 사용할 수 있습니까? 어떤 생각 ?? –

+0

내 편집 답변보기 – MAC

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); 
    } 
}); 
+0

에 다른 레이아웃의 매개 변수를 설정하는 방법을 알려주세요. rotation.setAnimationListener (new DisplayNextView (isFirstView, mContainer, relChild1, relChild2))); 새로운 레이아웃 main2.xml 및 다른 작업 secondpage.java를 suppsoe 그래서 버튼은 mainacitivity에서 presed 때이 페이지를 호출 ??? –

2

체감 당신의 OnClickListener를 방법에 setContentView을 사용

setContentView(R.layout.layout); 

편집 : btnRotateit는 언론 당신이 시도 그런 다음 mContainer을 표시 relChild1relChild2를 표시하고 다시 btnRotateBack을 누릅니다 다음 때 나는 당신이 원하는 생각 같은 :

btnRotateit 온 클릭 방법에 코드를 추가

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); 

이 하나를 시도하고 알려줘합니다.

0

vishwa 님의 답변을 통해 기존 활동의 레이아웃을 변경하여 다른 활동으로 변경하는 것을 원하지 않는 것처럼 보입니다. 어떤 체이스 :

Intent intent = new Intent(this, secondpage.class); 
startActivity(intent); 
관련 문제