blob: a58dbfbbd87b6984a18fc5d78ee528c97f906ca9 [file] [log] [blame]
/*
* 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<ListItemObject> mData = new ArrayList<ListItemObject>();
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);
}
}