/*
* Copyright (C) 2015 Brent Marriott
*
* 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.hookedonplay.decoviewsample;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.AnticipateOvershootInterpolator;
import android.widget.TextView;
import com.hookedonplay.decoviewlib.DecoView;
import com.hookedonplay.decoviewlib.charts.DecoDrawEffect;
import com.hookedonplay.decoviewlib.charts.SeriesItem;
import com.hookedonplay.decoviewlib.events.DecoEvent;
import com.hookedonplay.decoviewlib.events.DecoEvent.EventType;
import java.util.Random;
public class Sample4Fragment extends SampleFragment {
final float mSeriesMax = 50f;
final private int[] mColor = {
Color.parseColor("#FF0000"),
Color.parseColor("#FFFFFF"),
Color.parseColor("#0000FF"),
Color.parseColor("#EEEEEE"),
Color.parseColor("#FF6666"),
Color.parseColor("#DDDDDD"),
Color.parseColor("#2222FF")
};
private int[] mSeriesIndex = new int[7];
private int mBackIndex;
private boolean mFullCircle = true;
private boolean mFlip = true;
public Sample4Fragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_sample_generic, container, false);
}
@Override
protected void createTracks() {
setDemoFinished(false);
final DecoView decoView = getDecoView();
final View view = getView();
if (decoView == null || view == null) {
return;
}
decoView.setVertGravity(DecoView.VertGravity.GRAVITY_VERTICAL_FILL);
decoView.setHorizGravity(DecoView.HorizGravity.GRAVITY_HORIZONTAL_FILL);
mFullCircle = !mFullCircle;
mFlip = mFullCircle ? !mFlip : mFlip;
view.setBackgroundColor(Color.argb(255, 16, 16, 16));
decoView.executeReset();
decoView.deleteAll();
decoView.configureAngles(mFullCircle ? 360 : 260, mFlip ? 180 : 0);
float widthLine = getDimension(8f);
SeriesItem seriesBackItem = new SeriesItem.Builder(Color.argb(255, 32, 32, 32))
.setRange(0, mSeriesMax, mSeriesMax)
.setLineWidth(widthLine * mSeriesIndex.length)
.setInitialVisibility(false)
.setDrawAsPoint(false)
.build();
mBackIndex = decoView.addSeries(seriesBackItem);
for (int i = 0; i < mSeriesIndex.length; i++) {
SeriesItem seriesItem = new SeriesItem.Builder(mColor[i])
.setRange(0, mSeriesMax, 0)
.setLineWidth(widthLine * (mSeriesIndex.length - i))
.setInitialVisibility(false)
.setDrawAsPoint(i != 0)
.build();
mSeriesIndex[i] = decoView.addSeries(seriesItem);
}
final TextView textPercent = (TextView) view.findViewById(R.id.textPercentage);
textPercent.setVisibility(View.INVISIBLE);
}
@Override
protected void setupEvents() {
final DecoView arcView = getDecoView();
if (arcView == null || arcView.isEmpty()) {
return;
}
arcView.executeReset();
arcView.addEvent(new DecoEvent.Builder(EventType.EVENT_SHOW, true)
.setIndex(mBackIndex)
.setDelay(100)
.setDuration(3000)
.build());
arcView.addEvent(new DecoEvent.Builder(EventType.EVENT_HIDE, false)
.setIndex(mBackIndex)
.setDelay(18000)
.setDuration(4000)
.setListener(new DecoEvent.ExecuteEventListener() {
@Override
public void onEventStart(DecoEvent event) {
}
@Override
public void onEventEnd(DecoEvent event) {
createTracks();
setupEvents();
}
})
.build());
Random rand = new Random();
for (int i = 0; i < mSeriesIndex.length; i++) {
int index = mSeriesIndex[i];
arcView.addEvent(new DecoEvent.Builder(DecoDrawEffect.EffectType.EFFECT_SPIRAL_OUT)
.setIndex(mSeriesIndex[i])
.setDelay(i * 250)
.setDuration(2500)
.build());
if (i == 0) {
arcView.addEvent(new DecoEvent.Builder(mSeriesMax)
.setIndex(index)
.setDelay(5000)
.build());
arcView.addEvent(new DecoEvent.Builder(mSeriesMax / 2)
.setIndex(index)
.setDelay(9500)
.build());
} else {
arcView.addEvent(new DecoEvent.Builder(rand.nextInt((int) mSeriesMax))
.setIndex(index)
.setDelay(5000 + (mSeriesIndex.length - 1 - i) * 750)
.build());
arcView.addEvent(new DecoEvent.Builder(rand.nextInt((int) mSeriesMax / 2))
.setIndex(index)
.setDelay(9500 + (mSeriesIndex.length - 1 - i) * 500)
.build());
}
arcView.addEvent(new DecoEvent.Builder(mSeriesMax)
.setIndex(index)
.setDelay(14000)
.setDuration(3000)
.setInterpolator(new AnticipateOvershootInterpolator())
.build());
arcView.addEvent(new DecoEvent.Builder(0)
.setIndex(index)
.setDelay(17500 + (mSeriesIndex.length - 1 - i) * 200)
.setDuration(1000)
.setInterpolator(new AccelerateInterpolator())
.build());
arcView.addEvent(new DecoEvent.Builder(DecoDrawEffect.EffectType.EFFECT_SPIRAL_IN)
.setIndex(mSeriesIndex[i])
.setDelay(18500 + (mSeriesIndex.length - 1 - i) * 200)
.setDuration(2000)
.setEffectRotations(3)
.build());
}
}
}