国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android實(shí)現(xiàn)卡片翻轉(zhuǎn)動畫

2019-12-12 03:56:26
字體:
供稿:網(wǎng)友

最近項(xiàng)目上用到了卡片的翻轉(zhuǎn)效果,大致研究了下,也參考了網(wǎng)上的一些Demo,簡單實(shí)現(xiàn)如下:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <FrameLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:id="@+id/card_main_container"  android:layout_height="match_parent"  android:layout_width="match_parent">   <include layout="@layout/activity_card_back"/>   <include layout="@layout/activity_card_front"/> </FrameLayout> 

可以看出,用到了兩個布局

activity_card_back.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:id="@+id/card_back_container"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:layout_marginLeft="@dimen/activity_horizontal_margin"  android:layout_marginTop="@dimen/activity_vertical_margin"  android:layout_marginRight="@dimen/activity_horizontal_margin"  android:layout_marginBottom="@dimen/activity_vertical_margin"  android:background="@drawable/shape_card_back_bg"  android:orientation="vertical">   <TextView  android:layout_width="match_parent"  android:layout_height="match_parent"  android:gravity="center"  android:text="背面"  android:textSize="30sp"/> </LinearLayout>

activity_card_front.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:id="@+id/card_font_container"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:layout_marginLeft="@dimen/activity_horizontal_margin"  android:layout_marginTop="@dimen/activity_vertical_margin"  android:layout_marginRight="@dimen/activity_horizontal_margin"  android:layout_marginBottom="@dimen/activity_vertical_margin"  android:background="@drawable/shape_card_front_bg"  android:orientation="vertical">   <TextView  android:layout_width="match_parent"  android:layout_height="match_parent"  android:gravity="center"  android:text="正面"  android:textSize="30sp"/> </LinearLayout> 

附上自定義的圖片:
shape_card_back_bg.xml

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android">  <corners android:radius="30dp"/>  <solid android:color="@android:color/holo_red_light"/> </shape> 

shape_card_front_bg.xml

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android">  <corners android:radius="30dp"/>  <solid android:color="@android:color/darker_gray"/> </shape> 

主要的邏輯如下:

package com.jackie.flipanimationdemo;  import android.animation.Animator; import android.animation.AnimatorInflater; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.FrameLayout; import android.widget.LinearLayout;  public class MainActivity extends AppCompatActivity implements View.OnClickListener {  private FrameLayout mCardMainContainer;  private LinearLayout mCardFontContainer, mCardBackContainer;   private AnimatorSet mRightOutAnimatorSet, mLeftInAnimatorSet;   private boolean mIsShowBack = false; //是否顯示背面   @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);   initView();  initEvent();  }   private void initView() {  mCardMainContainer = (FrameLayout) findViewById(R.id.card_main_container);  mCardFontContainer = (LinearLayout) findViewById(R.id.card_font_container);  mCardBackContainer = (LinearLayout) findViewById(R.id.card_back_container);   setAnimators(); // 設(shè)置動畫  setCameraDistance(); // 設(shè)置鏡頭距離  }   private void initEvent() {  mCardMainContainer.setOnClickListener(this);  }   private void setAnimators() {  mRightOutAnimatorSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.anim_right_out);  mLeftInAnimatorSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.anim_left_in);   // 設(shè)置點(diǎn)擊事件  mRightOutAnimatorSet.addListener(new AnimatorListenerAdapter() {   @Override   public void onAnimationStart(Animator animation) {   super.onAnimationStart(animation);   mCardMainContainer.setClickable(false);   }  });   mLeftInAnimatorSet.addListener(new AnimatorListenerAdapter() {   @Override   public void onAnimationEnd(Animator animation) {   super.onAnimationEnd(animation);   mCardMainContainer.setClickable(true);   }  });  }   private void setCameraDistance() {  int distance = 16000;  float scale = getResources().getDisplayMetrics().density * distance;  mCardFontContainer.setCameraDistance(scale);  mCardBackContainer.setCameraDistance(scale);  }   private void flipCard() {  if (!mIsShowBack) { // 正面朝上   mRightOutAnimatorSet.setTarget(mCardFontContainer);   mLeftInAnimatorSet.setTarget(mCardBackContainer);   mRightOutAnimatorSet.start();   mLeftInAnimatorSet.start();   mIsShowBack = true;  } else { // 背面朝上   mRightOutAnimatorSet.setTarget(mCardBackContainer);   mLeftInAnimatorSet.setTarget(mCardFontContainer);   mRightOutAnimatorSet.start();   mLeftInAnimatorSet.start();   mIsShowBack = false;  }  }   @Override  public void onClick(View v) {  switch (v.getId()) {   case R.id.card_main_container:   flipCard();   break;  }  } } 

用到一些動畫的資源:

anim_left_in.xml

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android">  <!--消失-->  <objectAnimator  android:duration="0"  android:propertyName="alpha"  android:valueFrom="1.0"  android:valueTo="0.0"/>   <!--旋轉(zhuǎn)-->  <objectAnimator  android:duration="@integer/anim_length"  android:propertyName="rotationY"  android:valueFrom="-180"  android:valueTo="0"/>   <!--出現(xiàn)-->  <objectAnimator  android:duration="0"  android:propertyName="alpha"  android:startOffset="@integer/anim_half_length"  android:valueFrom="0.0"  android:valueTo="1.0"/> </set> 

anim_right_out.xml

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android">  <!--旋轉(zhuǎn)-->  <objectAnimator  android:duration="@integer/anim_length"  android:propertyName="rotationY"  android:valueFrom="0"  android:valueTo="180"/>   <!--消失-->  <objectAnimator  android:duration="0"  android:propertyName="alpha"  android:startOffset="@integer/anim_half_length"  android:valueFrom="1.0"  android:valueTo="0.0"/> </set> 

用到了屬性動畫,為了兼容性,別忘了如下配置:

效果圖如下:

效果圖:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 班戈县| 红安县| 五大连池市| 前郭尔| 石河子市| 南召县| 堆龙德庆县| 田东县| 平阳县| 绥阳县| 石阡县| 安远县| 呼玛县| 沙河市| 乌鲁木齐市| 宕昌县| 荣昌县| 潜江市| 北安市| 应用必备| 商南县| 随州市| 横山县| 临清市| 健康| 博爱县| 霍林郭勒市| 南部县| 昌图县| 石棉县| 措勤县| 扎鲁特旗| 吴忠市| 德昌县| 大厂| 枞阳县| 蓝山县| 修武县| 安宁市| 行唐县| 聂荣县|