博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Displaying Card Flip Animations 显示卡片翻转动画
阅读量:4046 次
发布时间:2019-05-24

本文共 5405 字,大约阅读时间需要 18 分钟。

If you want to jump ahead and see a full working example, and run the sample app and select the Card Flip example. See the following files for the code implementation:

  • src/CardFlipActivity.java
  • animator/card_flip_right_in.xml
  • animator/card_flip_right_out.xml
  • animator/card_flip_right_in.xml
  • animator/card_flip_left_out.xml
  • layout/fragment_card_back.xml
  • layout/fragment_card_front.xml
  • http://blog.csdn.net/sergeycao

Create the Animators

Create the animations for the card flips. You'll need two animators for when the front of the card animates out and to the left and in and from the left. You'll also need two animators for when the back of the card animates in and from the right and out and to the right.

card_flip_left_in.xml

card_flip_left_out.xml

card_flip_right_in.xml

card_flip_right_out.xml

Create the Views

Each side of the "card" is a separate layout that can contain any content you want, such as two screens of text, two images, or any combination of views to flip between. You'll then use the two layouts in the fragments that you'll later animate. The following layouts create one side of a card that shows text:

and the other side of the card that displays an :

Create the Fragment

Create fragment classes for the front and back of the card. These classes return the layouts that you created previously in the method of each fragment. You can then create instances of this fragment in the parent activity where you want to show the card. The following example shows nested fragment classes inside of the parent activity that uses them:

public class CardFlipActivity extends Activity {    ...    /**     * A fragment representing the front of the card.     */    public class CardFrontFragment extends Fragment {        @Override        public View onCreateView(LayoutInflater inflater, ViewGroup container,                Bundle savedInstanceState) {            return inflater.inflate(R.layout.fragment_card_front, container, false);        }    }    /**     * A fragment representing the back of the card.     */    public class CardBackFragment extends Fragment {        @Override        public View onCreateView(LayoutInflater inflater, ViewGroup container,                Bundle savedInstanceState) {            return inflater.inflate(R.layout.fragment_card_back, container, false);        }    }}

Animate the Card Flip

Now, you'll need to display the fragments inside of a parent activity. To do this, first create the layout for your activity. The following example creates a that you can add fragments to at runtime:

In the activity code, set the content view to be the layout that you just created. It's also good idea to show a default fragment when the activity is created, so the following example activity shows you how to display the front of the card by default:

public class CardFlipActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_activity_card_flip);        if (savedInstanceState == null) {            getFragmentManager()                    .beginTransaction()                    .add(R.id.container, new CardFrontFragment())                    .commit();        }    }    ...}

Now that you have the front of the card showing, you can show the back of the card with the flip animation at an appropriate time. Create a method to show the other side of the card that does the following things:

  • Sets the custom animations that you created earlier for the fragment transitions.
  • Replaces the currently displayed fragment with a new fragment and animates this event with the custom animations that you created.
  • Adds the previously displayed fragment to the fragment back stack so when the user presses the Back button, the card flips back over.
private void flipCard() {    if (mShowingBack) {        getFragmentManager().popBackStack();        return;    }    // Flip to the back.    mShowingBack = true;    // Create and commit a new fragment transaction that adds the fragment for the back of    // the card, uses custom animations, and is part of the fragment manager's back stack.    getFragmentManager()            .beginTransaction()            // Replace the default fragment animations with animator resources representing            // rotations when switching to the back of the card, as well as animator            // resources representing rotations when flipping back to the front (e.g. when            // the system Back button is pressed).            .setCustomAnimations(                    R.animator.card_flip_right_in, R.animator.card_flip_right_out,                    R.animator.card_flip_left_in, R.animator.card_flip_left_out)            // Replace any fragments currently in the container view with a fragment            // representing the next page (indicated by the just-incremented currentPage            // variable).            .replace(R.id.container, new CardBackFragment())            // Add this transaction to the back stack, allowing users to press Back            // to get to the front of the card.            .addToBackStack(null)            // Commit the transaction.            .commit();}
你可能感兴趣的文章
企业云盘如何助力商业新发展
查看>>
医疗行业运用企业云盘可以带来什么样的提升
查看>>
教育数字智能化能为现有体系带来新的起点
查看>>
媒体广告业如何将内容资产进行高效地综合管理与利用
查看>>
能源化工要怎么管控核心数据
查看>>
媒体广告业如何运用云盘提升效率
查看>>
企业如何运用企业云盘进行数字化转型-实现新发展
查看>>
司法如何运用电子智能化加快现代化建设
查看>>
iSecret 1.1 正在审核中
查看>>
IOS开发的开源库
查看>>
IOS开发的开源库
查看>>
Jenkins - sonarqube 代码审查
查看>>
Jenkins + Docker + SpringCloud 微服务持续集成(一)
查看>>
Jenkins + Docker + SpringCloud 微服务持续集成 - 单机部署(二)
查看>>
Jenkins + Docker + SpringCloud 微服务持续集成 - 高可用集群部署(三)
查看>>
Golang struct 指针引用用法(声明入门篇)
查看>>
Linux 粘滞位 suid sgid
查看>>
C#控件集DotNetBar安装及破解
查看>>
Winform皮肤控件IrisSkin4.dll使用
查看>>
Winform多线程
查看>>