aboutsummaryrefslogtreecommitdiff
path: root/src/org/happysanta/gd/Menu/Views
diff options
context:
space:
mode:
authorevgenyzinoviev <me@ch1p.com>2015-08-14 17:11:48 +0300
committerevgenyzinoviev <me@ch1p.com>2015-08-14 17:11:48 +0300
commitae0e6ec634d8ab515ae381145a89d9ce649ba082 (patch)
tree081af7274605451b6e48d20961dbcf47bdf43b93 /src/org/happysanta/gd/Menu/Views
initial
Diffstat (limited to 'src/org/happysanta/gd/Menu/Views')
-rw-r--r--src/org/happysanta/gd/Menu/Views/LevelNameLeadingMarginSpan2.java38
-rw-r--r--src/org/happysanta/gd/Menu/Views/MenuHelmetView.java111
-rw-r--r--src/org/happysanta/gd/Menu/Views/MenuImageView.java34
-rw-r--r--src/org/happysanta/gd/Menu/Views/MenuLinearLayout.java68
-rw-r--r--src/org/happysanta/gd/Menu/Views/MenuRelativeLayout.java55
-rw-r--r--src/org/happysanta/gd/Menu/Views/MenuTextView.java73
-rw-r--r--src/org/happysanta/gd/Menu/Views/MenuTitleLinearLayout.java39
-rw-r--r--src/org/happysanta/gd/Menu/Views/MenuView.java12
-rw-r--r--src/org/happysanta/gd/Menu/Views/ObservableScrollView.java31
9 files changed, 461 insertions, 0 deletions
diff --git a/src/org/happysanta/gd/Menu/Views/LevelNameLeadingMarginSpan2.java b/src/org/happysanta/gd/Menu/Views/LevelNameLeadingMarginSpan2.java
new file mode 100644
index 0000000..09c744d
--- /dev/null
+++ b/src/org/happysanta/gd/Menu/Views/LevelNameLeadingMarginSpan2.java
@@ -0,0 +1,38 @@
+package org.happysanta.gd.Menu.Views;
+
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.text.Layout;
+import android.text.style.LeadingMarginSpan;
+
+public class LevelNameLeadingMarginSpan2 implements LeadingMarginSpan.LeadingMarginSpan2 {
+
+ private int margin;
+ private int lines;
+
+ public LevelNameLeadingMarginSpan2(int lines, int margin) {
+ this.margin = margin;
+ this.lines = lines;
+ }
+
+ @Override
+ public int getLeadingMargin(boolean first) {
+ if (first) {
+ return margin;
+ } else {
+ return 0;
+ }
+ }
+
+ @Override
+ public void drawLeadingMargin(Canvas c, Paint p, int x, int dir,
+ int top, int baseline, int bottom, CharSequence text,
+ int start, int end, boolean first, Layout layout) {
+ }
+
+ @Override
+ public int getLeadingMarginLineCount() {
+ return lines;
+ }
+
+}
diff --git a/src/org/happysanta/gd/Menu/Views/MenuHelmetView.java b/src/org/happysanta/gd/Menu/Views/MenuHelmetView.java
new file mode 100644
index 0000000..bb2a37a
--- /dev/null
+++ b/src/org/happysanta/gd/Menu/Views/MenuHelmetView.java
@@ -0,0 +1,111 @@
+package org.happysanta.gd.Menu.Views;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.view.View;
+import org.happysanta.gd.Game.Bitmap;
+import org.happysanta.gd.Global;
+
+import static org.happysanta.gd.Helpers.getDp;
+import static org.happysanta.gd.Helpers.isSDK11OrHigher;
+import static org.happysanta.gd.Helpers.logDebug;
+
+public class MenuHelmetView extends View {
+
+ protected static final int WIDTH = 8;
+ protected static final int HEIGHT = 8;
+ /*protected static final int PADDING_LEFT = 0;
+ protected static final int PADDING_TOP = 5;
+ protected static final int PADDING_RIGHT = 5;
+ protected static final int PADDING_BOTTOM = 0;*/
+
+ protected static int angle = 0;
+ protected static long angleLastMs = 0;
+ protected static final int angleInterval = 50;
+ protected static final int angleDelta = 10;
+
+ protected boolean show = false;
+ protected boolean _setMeasuredHeight = false;
+ protected Bitmap helmet = Bitmap.get(Bitmap.HELMET);
+ protected static MenuHelmetView lastActive = null;
+
+ public static void clearStaticFields() {
+ lastActive = null;
+ angle = 0;
+ angleLastMs = 0;
+ }
+
+ public MenuHelmetView(Context context) {
+ super(context);
+ }
+
+ public MenuHelmetView(Context context, AttributeSet attributeSet) {
+ super(context, attributeSet);
+ }
+
+ @Override
+ public void onDraw(Canvas canvas) {
+ canvas.save();
+ canvas.scale(Global.density, Global.density);
+
+ drawHelmet(canvas);
+
+ canvas.restore();
+ invalidate();
+ }
+
+ protected void drawHelmet(Canvas canvas) {
+ if (show) {
+ long ms = System.currentTimeMillis();
+ if (angleLastMs == 0 || ms - angleLastMs >= angleInterval) {
+ angle += angleDelta;
+ if (angle >= 360) angle -= 360;
+ angleLastMs = ms;
+ }
+
+ int y = getScaledHeight() / 2 - helmet.getHeightDp() / 2;
+
+ canvas.save();
+ canvas.rotate(angle, helmet.getWidthDp() / 2, y + helmet.getHeightDp() / 2);
+ canvas.drawBitmap(helmet.bitmap, new Rect(0, 0, helmet.getWidth(), helmet.getHeight()), new RectF(0, y, helmet.getWidthDp(), y + helmet.getHeightDp()), null);
+ canvas.restore();
+ }
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ int width = MeasureSpec.getSize(getDp(WIDTH * 2.2f));
+ int height = heightMeasureSpec;
+ if (_setMeasuredHeight)
+ height = MeasureSpec.getSize(getDp(HEIGHT * 2.2f));
+ else if (!isSDK11OrHigher()) {
+ height = MeasureSpec.getSize(getDp(HEIGHT * 4.5f));
+ }
+ setMeasuredDimension(width, height);
+ }
+
+ public void setShow(boolean show) {
+ setShow(show, true);
+ }
+
+ public void setShow(boolean show, boolean checkLast) {
+ if (checkLast && lastActive != null) {
+ lastActive.setShow(false, false);
+ }
+ this.show = show;
+ lastActive = this;
+ }
+
+ protected int getScaledHeight() {
+ return Math.round(getHeight() / Global.density);
+ }
+
+ public void setMeasuredHeight(boolean setMeasuredHeight) {
+ this._setMeasuredHeight = setMeasuredHeight;
+ }
+
+}
diff --git a/src/org/happysanta/gd/Menu/Views/MenuImageView.java b/src/org/happysanta/gd/Menu/Views/MenuImageView.java
new file mode 100644
index 0000000..1ef3f70
--- /dev/null
+++ b/src/org/happysanta/gd/Menu/Views/MenuImageView.java
@@ -0,0 +1,34 @@
+package org.happysanta.gd.Menu.Views;
+
+import android.content.Context;
+import android.widget.ImageView;
+
+import static org.happysanta.gd.Helpers.runOnUiThread;
+
+public class MenuImageView extends ImageView {
+
+ public MenuImageView(Context context) {
+ super(context);
+ }
+
+ @Override
+ public void setImageResource(final int resid) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MenuImageView.super.setImageResource(resid);
+ }
+ });
+ }
+
+ @Override
+ public void setVisibility(final int visibility) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MenuImageView.super.setVisibility(visibility);
+ }
+ });
+ }
+
+}
diff --git a/src/org/happysanta/gd/Menu/Views/MenuLinearLayout.java b/src/org/happysanta/gd/Menu/Views/MenuLinearLayout.java
new file mode 100644
index 0000000..98f665e
--- /dev/null
+++ b/src/org/happysanta/gd/Menu/Views/MenuLinearLayout.java
@@ -0,0 +1,68 @@
+package org.happysanta.gd.Menu.Views;
+
+import android.content.Context;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import static org.happysanta.gd.Helpers.runOnUiThread;
+
+public class MenuLinearLayout extends LinearLayout {
+
+ boolean interceptTouchEvents = false;
+
+ public MenuLinearLayout(Context context) {
+ super(context);
+ }
+
+ public MenuLinearLayout(Context context, boolean interceptTouchEvents) {
+ super(context);
+ this.interceptTouchEvents = interceptTouchEvents;
+ }
+
+ @Override
+ public void removeAllViews() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MenuLinearLayout.super.removeAllViews();
+ }
+ });
+ }
+
+ @Override
+ public void setVisibility(final int visibility) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MenuLinearLayout.super.setVisibility(visibility);
+ }
+ });
+ }
+
+ @Override
+ public void addView(final View view) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MenuLinearLayout.super.addView(view);
+ }
+ });
+ }
+
+ @Override
+ public void setPadding(final int left, final int top, final int right, final int bottom) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MenuLinearLayout.super.setPadding(left, top, right, bottom);
+ }
+ });
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent evt) {
+ return interceptTouchEvents;
+ }
+
+}
diff --git a/src/org/happysanta/gd/Menu/Views/MenuRelativeLayout.java b/src/org/happysanta/gd/Menu/Views/MenuRelativeLayout.java
new file mode 100644
index 0000000..3e5e0d2
--- /dev/null
+++ b/src/org/happysanta/gd/Menu/Views/MenuRelativeLayout.java
@@ -0,0 +1,55 @@
+package org.happysanta.gd.Menu.Views;
+
+import android.content.Context;
+import android.view.View;
+import android.widget.RelativeLayout;
+
+import static org.happysanta.gd.Helpers.runOnUiThread;
+
+public class MenuRelativeLayout extends RelativeLayout {
+
+ public MenuRelativeLayout(Context context) {
+ super(context);
+ }
+
+ @Override
+ public void removeAllViews() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MenuRelativeLayout.super.removeAllViews();
+ }
+ });
+ }
+
+ @Override
+ public void setVisibility(final int visibility) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MenuRelativeLayout.super.setVisibility(visibility);
+ }
+ });
+ }
+
+ @Override
+ public void addView(final View view) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MenuRelativeLayout.super.addView(view);
+ }
+ });
+ }
+
+ @Override
+ public void setPadding(final int left, final int top, final int right, final int bottom) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MenuRelativeLayout.super.setPadding(left, top, right, bottom);
+ }
+ });
+ }
+
+}
diff --git a/src/org/happysanta/gd/Menu/Views/MenuTextView.java b/src/org/happysanta/gd/Menu/Views/MenuTextView.java
new file mode 100644
index 0000000..4b48f5f
--- /dev/null
+++ b/src/org/happysanta/gd/Menu/Views/MenuTextView.java
@@ -0,0 +1,73 @@
+package org.happysanta.gd.Menu.Views;
+
+import android.content.Context;
+import android.graphics.Typeface;
+import android.widget.TextView;
+
+import static org.happysanta.gd.Helpers.runOnUiThread;
+
+public class MenuTextView extends TextView {
+
+ protected boolean isAttached = false;
+
+ public MenuTextView(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ isAttached = true;
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ isAttached = false;
+ }
+
+ @Override
+ public boolean isAttachedToWindow() {
+ return isAttached;
+ }
+
+ public void setTextOnUiThread(final CharSequence sequence) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MenuTextView.super.setText(sequence);
+ }
+ });
+ }
+
+ @Override
+ public void setTextSize(final float size) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MenuTextView.super.setTextSize(size);
+ }
+ });
+ }
+
+ @Override
+ public void setTypeface(final Typeface typeface) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MenuTextView.super.setTypeface(typeface);
+ }
+ });
+ }
+
+ @Override
+ public void setVisibility(final int visibility) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ MenuTextView.super.setVisibility(visibility);
+ }
+ });
+ }
+
+}
diff --git a/src/org/happysanta/gd/Menu/Views/MenuTitleLinearLayout.java b/src/org/happysanta/gd/Menu/Views/MenuTitleLinearLayout.java
new file mode 100644
index 0000000..5c3f790
--- /dev/null
+++ b/src/org/happysanta/gd/Menu/Views/MenuTitleLinearLayout.java
@@ -0,0 +1,39 @@
+package org.happysanta.gd.Menu.Views;
+
+import android.app.Activity;
+import android.widget.RelativeLayout;
+
+import static org.happysanta.gd.Helpers.logDebug;
+
+public class MenuTitleLinearLayout extends RelativeLayout {
+
+ private Callback onSizeChangedCallback = null;
+
+ public MenuTitleLinearLayout(Activity activity) {
+ super(activity);
+ }
+
+ @Override
+ public void onSizeChanged(final int w, final int h, final int oldw, final int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+
+ if (onSizeChangedCallback != null) {
+ onSizeChangedCallback.run(w, h, oldw, oldh);
+ }
+ }
+
+ /*public void forceInvokeOnSizeChangedCallback() {
+ if (onSizeChangedCallback != null) {
+ onSizeChangedCallback.run(getWidth(), getHeight(), 0, 0);
+ }
+ }*/
+
+ public void setOnSizeChangedCallback(Callback callback) {
+ onSizeChangedCallback = callback;
+ }
+
+ public interface Callback {
+ public abstract void run(int w, int h, int oldw, int oldh);
+ }
+
+}
diff --git a/src/org/happysanta/gd/Menu/Views/MenuView.java b/src/org/happysanta/gd/Menu/Views/MenuView.java
new file mode 100644
index 0000000..ba47071
--- /dev/null
+++ b/src/org/happysanta/gd/Menu/Views/MenuView.java
@@ -0,0 +1,12 @@
+package org.happysanta.gd.Menu.Views;
+
+import android.view.View;
+import org.happysanta.gd.GDActivity;
+
+public class MenuView extends View {
+
+ public MenuView(GDActivity activity) {
+ super(activity);
+ }
+
+}
diff --git a/src/org/happysanta/gd/Menu/Views/ObservableScrollView.java b/src/org/happysanta/gd/Menu/Views/ObservableScrollView.java
new file mode 100644
index 0000000..5801928
--- /dev/null
+++ b/src/org/happysanta/gd/Menu/Views/ObservableScrollView.java
@@ -0,0 +1,31 @@
+package org.happysanta.gd.Menu.Views;
+
+import android.content.Context;
+import android.widget.ScrollView;
+
+public class ObservableScrollView
+ extends ScrollView {
+
+ private OnScrollListener scrollListener = null;
+
+ public ObservableScrollView(Context context) {
+ super(context);
+ }
+
+ public void setOnScrollListener(OnScrollListener scrollListener) {
+ this.scrollListener = scrollListener;
+ }
+
+ @Override
+ protected void onScrollChanged(int x, int y, int oldx, int oldy) {
+ super.onScrollChanged(x, y, oldx, oldy);
+ if (scrollListener != null) {
+ scrollListener.onScroll(this, x, y, oldx, oldy);
+ }
+ }
+
+ public interface OnScrollListener {
+ public abstract void onScroll(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);
+ }
+
+}