/* $Id: $
*
*/
package com.oreilly.demo.android.pa.viewdemo;
import android.app.Activity;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import com.oreilly.demo.android.pa.viewdemo.drawable.HelloAndroidTextDrawable;
import com.oreilly.demo.android.pa.viewdemo.efx.RotationTransitionAnimation;
import com.oreilly.demo.android.pa.viewdemo.widget.EffectsWidget;
import com.oreilly.demo.android.pa.viewdemo.widget.GLDemoWidget;
import com.oreilly.demo.android.pa.viewdemo.widget.TransformedViewWidget;
import com.oreilly.demo.android.pa.viewdemo.widget.TransformedViewWidget.Transformation;
/**
*
* @version $Revision: $
* @author <a href="mailto:bmeike@callmeike.net">Blake Meike</a>
*/
public class TransformIt extends Activity {
/** the currently visible view */
View cur;
/** the view up next */
View next;
private AnimationDrawable throbber;
private GLDemoWidget glWidget;
private View efxView;
/** @see android.app.Activity#onCreate(android.os.Bundle) */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// get the current view
cur = findViewById(R.id.xform_v);
buildXformView(
(LinearLayout) findViewById(R.id.xform_v_left),
(LinearLayout) findViewById(R.id.xform_v_right));
// and the next one
next = findViewById(R.id.efx_v);
next.setVisibility(View.GONE);
throbber = buildEfxView(
(LinearLayout) findViewById(R.id.efx_v_left),
(LinearLayout) findViewById(R.id.efx_v_right));
glWidget = (GLDemoWidget) findViewById(R.id.efx_gl);
efxView = next;
// install the animation click listener
final View root = findViewById(R.id.main);
findViewById(R.id.main).setOnClickListener(
new OnClickListener() {
@Override public void onClick(View v) {
new RotationTransitionAnimation(1, root, cur, next)
.runAnimation();
// exchange views
View t = cur;
cur = next;
next = t;
toggleThrobber();
} });
}
private void buildXformView(LinearLayout lv, LinearLayout rv) {
Drawable drawable = new HelloAndroidTextDrawable();
lv.addView(new TransformedViewWidget(
this,
drawable,
new Transformation() {
@Override public String describe() { return "identity"; }
@Override public void transform(Canvas canvas) { }
} ));
lv.addView(new TransformedViewWidget(
this,
drawable,
new Transformation() {
@Override public String describe() {
return "scale(1.2,1.2)";
}
@Override public void transform(Canvas canvas) {
canvas.scale(1.2F, 1.2F);
} }));
lv.addView(new TransformedViewWidget(
this,
drawable,
new Transformation() {
@Override public String describe() {
return "translate(140,-20),rotate(90)";
}
@Override public void transform(Canvas canvas) {
canvas.translate(140.0F, -20.0F);
canvas.rotate(90.0F);
} }));
drawable = getResources().getDrawable(R.drawable.to);
drawable.setBounds(-20, -20, 205, 145);
rv.addView(new TransformedViewWidget(
this,
drawable,
new Transformation() {
@Override public String describe() { return "identity"; }
@Override public void transform(Canvas canvas) { }
} ));
rv.addView(new TransformedViewWidget(
this,
drawable,
new Transformation() {
@Override public String describe() {
return "scale(1.2,1.2)";
}
@Override public void transform(Canvas canvas) {
canvas.scale(1.2F, 1.2F);
} }));
rv.addView(new TransformedViewWidget(
this,
drawable,
new Transformation() {
@Override public String describe() {
return "translate(140,-20),rotate(90)";
}
@Override public void transform(Canvas canvas) {
canvas.translate(140.0F, -20.0F);
canvas.rotate(90.0F);
} }));
}
private AnimationDrawable buildEfxView(LinearLayout lv, LinearLayout rv) {
lv.addView(new EffectsWidget(
this,
1,
new EffectsWidget.PaintEffect() {
@Override public void setEffect(Paint paint) {
paint.setShadowLayer(1, 3, 4, Color.BLUE);
} }));
lv.addView(new EffectsWidget(
this,
3,
new EffectsWidget.PaintEffect() {
@Override public void setEffect(Paint paint) {
paint.setShader(
new LinearGradient(
0.0F,
0.0F,
100.0F,
10.0F,
new int[] {
Color.BLACK, Color.RED, Color.YELLOW },
new float[] { 0.0F, 0.5F, 0.95F },
Shader.TileMode.REPEAT));
} }));
lv.addView(new EffectsWidget(
this,
5,
new EffectsWidget.PaintEffect() {
@Override public void setEffect(Paint paint) {
paint.setMaskFilter(
new BlurMaskFilter(2, BlurMaskFilter.Blur.NORMAL));
} }));
rv.addView(new EffectsWidget(
this,
2,
new EffectsWidget.PaintEffect() {
@Override public void setEffect(Paint paint) {
paint.setShadowLayer(3, -8, 7, Color.GREEN);
} }));
rv.addView(new EffectsWidget(
this,
4,
new EffectsWidget.PaintEffect() {
@Override public void setEffect(Paint paint) {
paint.setShader(
new LinearGradient(
0.0F,
40.0F,
15.0F,
40.0F,
Color.BLUE,
Color.GREEN,
Shader.TileMode.MIRROR));
} }));
View w = new EffectsWidget(
this,
6,
new EffectsWidget.PaintEffect() {
@Override public void setEffect(Paint paint) { }
});
rv.addView(w);
w.setBackgroundResource(R.drawable.throbber);
lv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
rv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
return (AnimationDrawable) w.getBackground();
}
/**
* @see android.app.Activity#onPause()
*/
@Override
protected void onPause() {
super.onPause();
if (null != throbber) { throbber.stop(); }
if (null != glWidget) { glWidget.onPause(); }
}
/**
* @see android.app.Activity#onResume()
*/
@Override
protected void onResume() {
super.onResume();
toggleThrobber();
if (null != glWidget) { glWidget.onResume(); }
}
void toggleThrobber() {
if (null != throbber) {
if (efxView.equals(cur)) { throbber.start(); }
else { throbber.stop(); }
}
}
}