Home | History | Annotate | Download | only in insertingcells
      1 /*
      2  * Copyright (C) 2013 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.example.android.insertingcells;
     18 
     19 import android.animation.Animator;
     20 import android.animation.AnimatorListenerAdapter;
     21 import android.animation.ObjectAnimator;
     22 import android.app.Activity;
     23 import android.os.Bundle;
     24 import android.view.View;
     25 import android.widget.Button;
     26 import android.widget.RelativeLayout;
     27 
     28 import java.util.ArrayList;
     29 import java.util.List;
     30 
     31 /**
     32  * This application creates a ListView to which new elements can be added from the
     33  * top. When a new element is added, it is animated from above the bounds
     34  * of the list to the top. When the list is scrolled all the way to the top and a new
     35  * element is added, the row animation is accompanied by an image animation that pops
     36  * out of the round view and pops into the correct position in the top cell.
     37  */
     38 public class InsertingCells extends Activity implements OnRowAdditionAnimationListener {
     39 
     40     private ListItemObject mValues[];
     41 
     42     private InsertionListView mListView;
     43 
     44     private Button mButton;
     45 
     46     private Integer mItemNum = 0;
     47 
     48     private RoundView mRoundView;
     49 
     50     private int mCellHeight;
     51 
     52     @Override
     53     protected void onCreate(Bundle savedInstanceState) {
     54         super.onCreate(savedInstanceState);
     55         setContentView(R.layout.activity_main);
     56 
     57         mValues = new ListItemObject[] {
     58                 new ListItemObject("Chameleon", R.drawable.chameleon, 0),
     59                 new ListItemObject("Rock", R.drawable.rock, 0),
     60                 new ListItemObject("Flower", R.drawable.flower, 0),
     61         };
     62 
     63         mCellHeight = (int)(getResources().getDimension(R.dimen.cell_height));
     64 
     65         List<ListItemObject> mData = new ArrayList<ListItemObject>();
     66         CustomArrayAdapter mAdapter = new CustomArrayAdapter(this, R.layout.list_view_item, mData);
     67         RelativeLayout mLayout = (RelativeLayout)findViewById(R.id.relative_layout);
     68 
     69         mRoundView = (RoundView)findViewById(R.id.round_view);
     70         mButton = (Button)findViewById(R.id.add_row_button);
     71         mListView = (InsertionListView)findViewById(R.id.listview);
     72 
     73         mListView.setAdapter(mAdapter);
     74         mListView.setData(mData);
     75         mListView.setLayout(mLayout);
     76         mListView.setRowAdditionAnimationListener(this);
     77     }
     78 
     79     public void addRow(View view) {
     80         mButton.setEnabled(false);
     81 
     82         mItemNum++;
     83         ListItemObject obj = mValues[mItemNum % mValues.length];
     84         final ListItemObject newObj = new ListItemObject(obj.getTitle(), obj.getImgResource(),
     85                 mCellHeight);
     86 
     87         boolean shouldAnimateInNewImage = mListView.shouldAnimateInNewImage();
     88         if (!shouldAnimateInNewImage) {
     89             mListView.addRow(newObj);
     90             return;
     91         }
     92 
     93         mListView.setEnabled(false);
     94         ObjectAnimator animator = mRoundView.getScalingAnimator();
     95         animator.addListener(new AnimatorListenerAdapter() {
     96             @Override
     97             public void onAnimationRepeat(Animator animation) {
     98                 mListView.addRow(newObj);
     99             }
    100         });
    101         animator.start();
    102     }
    103 
    104     @Override
    105     public void onRowAdditionAnimationStart() {
    106         mButton.setEnabled(false);
    107     }
    108 
    109     @Override
    110     public void onRowAdditionAnimationEnd() {
    111         mButton.setEnabled(true);
    112     }
    113 }
    114