首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android 控件翻转切换格局(转)

2013-12-26 
android 控件翻转切换布局(转)?过程是:?1:准备好布局如下:?2:翻转view动画,翻转动画的监听。?3:翻转后布局

android 控件翻转切换布局(转)
?


过程是:?
1:准备好布局如下:?
2:翻转view动画,翻转动画的监听。?
3:翻转后布局的替换,这里用了隐藏?
我用了setVisibility(View.INVISIBLE)?



layout/mygaller_item_bg_01是正面?
layout/mygaller_item_bg_02是反面?
布局1:mygaller_item.xml

<?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent" android:orientation="vertical"      android:layout_height="wrap_content" android:padding="25dip"      android:id="@+id/container">      <FrameLayout android:layout_width="fill_parent"          android:orientation="vertical" android:layout_height="wrap_content"          android:id="@+id/container_bg">          <include layout="@layout/mygaller_item_bg_01" />          <include layout="@layout/mygaller_item_bg_02" />      </FrameLayout>  </LinearLayout>

?

?

View翻转效果:来源:http://mobile.51cto.com/android-265495.htm ?

import android.graphics.Camera;  import android.graphics.Matrix;  import android.view.animation.Animation;  import android.view.animation.Transformation;    public class Rotate3d 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 Rotate3d(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);      }  }  

?

?

过程和动画翻转的控制?

public class ViewRotate implements OnClickListener {      private ImageView imageview;      private View bg;      private DisplayNextView displayNextView;      private Context context;      private View convertView;      private LayoutInflater mInflater;      private boolean now_zhengfan;      private View container_bg;        public ViewRotate(Context context, View convertView,              LayoutInflater mInflater) {          this.context = context;          this.convertView = convertView;          this.mInflater = mInflater;          now_zhengfan = true;          AnimationUtils.loadAnimation(context, R.anim.my_alpha_action);          init();      }        public void init() {                      bg = (ViewGroup) convertView.findViewById(R.id.container);          bg.findViewById(R.id.btn_more).setOnClickListener(this);          container_bg = convertView.findViewById(R.id.container_bg);            container_bg          .setBackgroundDrawable(GraphicsBitmapUtils.                  BitmapToDrawable(GraphicsBitmapUtils.getRoundedCornerBitmap(GraphicsBitmapUtils                  .drawableToBitmap(context.getResources()                          .getDrawable(R.drawable.zh)))));      }        private void applyRotation(int position, float start, float end) {          // Find the center of the container          final float centerX = bg.getWidth() / 2.0f;          final float centerY = bg.getHeight() / 2.0f;          final Rotate3d rotation = new Rotate3d(start, end, centerX, centerY,                  310.0f, false);          rotation.setDuration(500);          rotation.setFillAfter(false);          rotation.setInterpolator(new AccelerateInterpolator());          rotation.setAnimationListener(new DisplayNextView(position, true));          bg.startAnimation(rotation);              AlphaAnimation alphaAnim = new AlphaAnimation(0, 1);      }        @Override      public void onClick(View v) {          // TODO Auto-generated method stub          bg.setEnabled(false);          applyRotation(0, 0, 90);      }        private final class DisplayNextView implements Animation.AnimationListener {          private final int mPosition;          private final boolean b;            private DisplayNextView(int position, boolean t) {              mPosition = position;              b = t;          }            public void onAnimationStart(Animation animation) {          }            public void onAnimationEnd(Animation animation) {              if (b) {                  bg.post(new SwapViews(mPosition));                  if (now_zhengfan) {                      bg.findViewById(R.id.backe_bg1).setVisibility(                              View.INVISIBLE);                  } else {                      bg.findViewById(R.id.backe_bg2).setVisibility(                              View.INVISIBLE);                  }              } else {                    bg.setEnabled(true);                  if (now_zhengfan) {                      bg.findViewById(R.id.backe_bg2).setVisibility(View.VISIBLE);                      bg.setOnClickListener(ViewRotate.this);                      bg.setClickable(true);                        AlphaAnimation alphaAnim = new AlphaAnimation(0, 1);                      alphaAnim.setDuration(2000);                      alphaAnim.setStartOffset(500);                      alphaAnim                              .setAnimationListener(new CanClickAnimationListener(                                      bg));                      bg.findViewById(R.id.backe_bg2).startAnimation(alphaAnim);                      now_zhengfan = false;                  } else {                      bg.findViewById(R.id.backe_bg1).setVisibility(View.VISIBLE);                      bg.setOnClickListener(ViewRotate.this);                        now_zhengfan = true;                      bg.setClickable(false);                      View btn = bg.findViewById(R.id.btn_more);                      btn.setOnClickListener(ViewRotate.this);    //                  container_bg  //                          .setBackgroundDrawable(GraphicsBitmapUtils.BitmapToDrawable(GraphicsBitmapUtils.getRoundedCornerBitmap(GraphicsBitmapUtils  //                                  .drawableToBitmap(context.getResources()  //                                          .getDrawable(R.drawable.zh)))));                        AlphaAnimation alphaAnim = new AlphaAnimation(0, 1);                      alphaAnim.setDuration(2000);                      alphaAnim.setStartOffset(500);                      alphaAnim                              .setAnimationListener(new CanClickAnimationListener(                                      bg, btn));                        bg.findViewById(R.id.backe_bg1).startAnimation(alphaAnim);                      // bg.findViewById(R.id.backe_bg1).startAnimation(                      // CopyOfTestRotate.this.animation);                    }              }            }            public void onAnimationRepeat(Animation animation) {            }      }        private final class SwapViews implements Runnable {          private final int mPosition;            public SwapViews(int position) {              mPosition = position;          }            public void run() {              final float centerX = bg.getWidth() / 2.0f;              final float centerY = bg.getHeight() / 2.0f;              Rotate3d rotation;              if (mPosition > -1) {                    rotation = new Rotate3d(90, 180, centerX, centerY, 310.0f,                          false);                  rotation.setAnimationListener(new DisplayNextView(mPosition,                          false));              } else {                  rotation = new Rotate3d(90, 0, centerX, centerY, 310.0f, false);              }              rotation.setDuration(500);              rotation.setFillAfter(false);              rotation.setInterpolator(new DecelerateInterpolator());              bg.startAnimation(rotation);              bg.setEnabled(false);          }      }    }  

?

?

?

?

热点排行