/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.android.insertingcells; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.RelativeLayout; import java.util.ArrayList; import java.util.List; /** * This application creates a ListView to which new elements can be added from the * top. When a new element is added, it is animated from above the bounds * of the list to the top. When the list is scrolled all the way to the top and a new * element is added, the row animation is accompanied by an image animation that pops * out of the round view and pops into the correct position in the top cell. */ public class InsertingCells extends Activity implements OnRowAdditionAnimationListener { private ListItemObject mValues[]; private InsertionListView mListView; private Button mButton; private Integer mItemNum = 0; private RoundView mRoundView; private int mCellHeight; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mValues = new ListItemObject[] { new ListItemObject("Chameleon", R.drawable.chameleon, 0), new ListItemObject("Rock", R.drawable.rock, 0), new ListItemObject("Flower", R.drawable.flower, 0), }; mCellHeight = (int)(getResources().getDimension(R.dimen.cell_height)); List mData = new ArrayList(); CustomArrayAdapter mAdapter = new CustomArrayAdapter(this, R.layout.list_view_item, mData); RelativeLayout mLayout = (RelativeLayout)findViewById(R.id.relative_layout); mRoundView = (RoundView)findViewById(R.id.round_view); mButton = (Button)findViewById(R.id.add_row_button); mListView = (InsertionListView)findViewById(R.id.listview); mListView.setAdapter(mAdapter); mListView.setData(mData); mListView.setLayout(mLayout); mListView.setRowAdditionAnimationListener(this); } public void addRow(View view) { mButton.setEnabled(false); mItemNum++; ListItemObject obj = mValues[mItemNum % mValues.length]; final ListItemObject newObj = new ListItemObject(obj.getTitle(), obj.getImgResource(), mCellHeight); boolean shouldAnimateInNewImage = mListView.shouldAnimateInNewImage(); if (!shouldAnimateInNewImage) { mListView.addRow(newObj); return; } mListView.setEnabled(false); ObjectAnimator animator = mRoundView.getScalingAnimator(); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationRepeat(Animator animation) { mListView.addRow(newObj); } }); animator.start(); } @Override public void onRowAdditionAnimationStart() { mButton.setEnabled(false); } @Override public void onRowAdditionAnimationEnd() { mButton.setEnabled(true); } }