package pl.polidea.androidflip3d.testingactivity;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import pl.polidea.androidflip3d.AbstractGridFlip3DImageAdapter;
import pl.polidea.androidflip3d.Flip3DView;
import pl.polidea.androidflip3d.Flip3DViewState;
import pl.polidea.androidflip3d.Flip3DViewState.Flip3DViewListener;
import pl.polidea.androidflip3d.ViewIndex;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.util.Log;
/**
* Tests Flip3D in grid.
*
*/
public class TestGridAdapter extends AbstractGridFlip3DImageAdapter<TestFlip3DViewState, Flip3DView> {
private static final String TAG = TestGridAdapter.class.getSimpleName();
private static final int MAX = 300;
private final List<TestFlip3DViewState> states = new ArrayList<TestFlip3DViewState>(MAX);
private final Context context;
private final int imageWidth;
public TestGridAdapter(final Context context, final int imageWidth) {
super(imageWidth);
this.context = context;
this.imageWidth = imageWidth;
for (int i = 0; i < MAX; i++) {
final Random r = new Random();
final byte[] b = new byte[4];
r.nextBytes(b);
final int color = Color.argb(b[0], b[1], b[2], b[3]);
final TestFlip3DViewState state = new TestFlip3DViewState(i, color);
states.add(state);
setViewStates(states);
}
}
@Override
protected Flip3DView createView() {
return new Flip3DView(context);
}
@Override
protected void prepareView(final int position, final Flip3DView view) {
final TestFlip3DViewState newState = Flip3DViewState.attachViewToViewState(position, states, view);
view.setInternalPadding(0);
view.setInternalMargin((imageWidth * 0));
final int res = context.getResources().getIdentifier("icon", "drawable", "pl.polidea.androidflip3d");
view.setImageBackDrawable(context.getResources().getDrawable(res));
final int color = getViewStates().get(position).getColor();
view.setImageFrontDrawable(new ColorDrawable(color));
newState.setFlip3dViewListener(new Flip3DViewListener() {
@Override
public void onStartedFlipping(final Flip3DViewState viewState, final int startingSide,
final boolean manuallyTriggered) {
if (manuallyTriggered) {
Log.d(TAG, "Started flipping view " + view.getId());
for (final Flip3DViewState flipViewState : getViewStates()) {
if (position != flipViewState.getId()) {
Log.v(TAG, "Forcing view " + flipViewState.getId() + " to front");
flipViewState.forceFlipTo(ViewIndex.FRONT_VIEW);
}
}
}
}
@Override
public void onFinishedFlipping(final Flip3DViewState viewState, final int endingSide,
final boolean manuallyTriggered) {
// we do nothing
}
});
newState.setView(view);
}
}