aboutsummaryrefslogtreecommitdiffstats
path: root/templates/other/CustomView/root/src/app_package/CustomView.java.ftl
diff options
context:
space:
mode:
Diffstat (limited to 'templates/other/CustomView/root/src/app_package/CustomView.java.ftl')
-rw-r--r--templates/other/CustomView/root/src/app_package/CustomView.java.ftl181
1 files changed, 181 insertions, 0 deletions
diff --git a/templates/other/CustomView/root/src/app_package/CustomView.java.ftl b/templates/other/CustomView/root/src/app_package/CustomView.java.ftl
new file mode 100644
index 0000000..e1c7e13
--- /dev/null
+++ b/templates/other/CustomView/root/src/app_package/CustomView.java.ftl
@@ -0,0 +1,181 @@
+package ${packageName};
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.drawable.Drawable;
+import android.text.TextPaint;
+import android.util.AttributeSet;
+import android.view.View;
+
+/**
+ * TODO: document your custom view class.
+ */
+public class ${viewClass} extends View {
+ private String mExampleString; // TODO: use a default from R.string...
+ private int mExampleColor = Color.RED; // TODO: use a default from R.color...
+ private float mExampleDimension = 0; // TODO: use a default from R.dimen...
+ private Drawable mExampleDrawable;
+
+ private TextPaint mTextPaint;
+ private float mTextWidth;
+ private float mTextHeight;
+
+ public ${viewClass}(Context context) {
+ super(context);
+ init(null, 0);
+ }
+
+ public ${viewClass}(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(attrs, 0);
+ }
+
+ public ${viewClass}(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ init(attrs, defStyle);
+ }
+
+ private void init(AttributeSet attrs, int defStyle) {
+ // Load attributes
+ final TypedArray a = getContext().obtainStyledAttributes(
+ attrs, R.styleable.${viewClass}, defStyle, 0);
+
+ mExampleString = a.getString(
+ R.styleable.${viewClass}_exampleString);
+ mExampleColor = a.getColor(
+ R.styleable.${viewClass}_exampleColor,
+ mExampleColor);
+ // Use getDimensionPixelSize or getDimensionPixelOffset when dealing with
+ // values that should fall on pixel boundaries.
+ mExampleDimension = a.getDimension(
+ R.styleable.${viewClass}_exampleDimension,
+ mExampleDimension);
+
+ if (a.hasValue(R.styleable.${viewClass}_exampleDrawable)) {
+ mExampleDrawable = a.getDrawable(
+ R.styleable.${viewClass}_exampleDrawable);
+ mExampleDrawable.setCallback(this);
+ }
+
+ a.recycle();
+
+ // Set up a default TextPaint object
+ mTextPaint = new TextPaint();
+ mTextPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
+ mTextPaint.setTextAlign(Paint.Align.LEFT);
+
+ // Update TextPaint and text measurements from attributes
+ invalidateTextPaintAndMeasurements();
+ }
+
+ private void invalidateTextPaintAndMeasurements() {
+ mTextPaint.setTextSize(mExampleDimension);
+ mTextPaint.setColor(mExampleColor);
+ mTextWidth = mTextPaint.measureText(mExampleString);
+
+ Paint.FontMetrics fontMetrics = mTextPaint.getFontMetrics();
+ mTextHeight = fontMetrics.bottom;
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+
+ // TODO: consider storing these as member variables to reduce
+ // allocations per draw cycle.
+ int paddingLeft = getPaddingLeft();
+ int paddingTop = getPaddingTop();
+ int paddingRight = getPaddingRight();
+ int paddingBottom = getPaddingBottom();
+
+ int contentWidth = getWidth() - paddingLeft - paddingRight;
+ int contentHeight = getHeight() - paddingTop - paddingBottom;
+
+ // Draw the text.
+ canvas.drawText(mExampleString,
+ paddingLeft + (contentWidth - mTextWidth) / 2,
+ paddingTop + (contentHeight + mTextHeight) / 2,
+ mTextPaint);
+
+ // Draw the example drawable on top of the text.
+ if (mExampleDrawable != null) {
+ mExampleDrawable.setBounds(paddingLeft, paddingTop,
+ paddingLeft + contentWidth, paddingTop + contentHeight);
+ mExampleDrawable.draw(canvas);
+ }
+ }
+
+ /**
+ * Gets the example string attribute value.
+ * @return The example string attribute value.
+ */
+ public String getExampleString() {
+ return mExampleString;
+ }
+
+ /**
+ * Sets the view's example string attribute value. In the example view, this string
+ * is the text to draw.
+ * @param exampleString The example string attribute value to use.
+ */
+ public void setExampleString(String exampleString) {
+ mExampleString = exampleString;
+ invalidateTextPaintAndMeasurements();
+ }
+
+ /**
+ * Gets the example color attribute value.
+ * @return The example color attribute value.
+ */
+ public int getExampleColor() {
+ return mExampleColor;
+ }
+
+ /**
+ * Sets the view's example color attribute value. In the example view, this color
+ * is the font color.
+ * @param exampleColor The example color attribute value to use.
+ */
+ public void setExampleColor(int exampleColor) {
+ mExampleColor = exampleColor;
+ invalidateTextPaintAndMeasurements();
+ }
+
+ /**
+ * Gets the example dimension attribute value.
+ * @return The example dimension attribute value.
+ */
+ public float getExampleDimension() {
+ return mExampleDimension;
+ }
+
+ /**
+ * Sets the view's example dimension attribute value. In the example view, this dimension
+ * is the font size.
+ * @param exampleDimension The example dimension attribute value to use.
+ */
+ public void setExampleDimension(float exampleDimension) {
+ mExampleDimension = exampleDimension;
+ invalidateTextPaintAndMeasurements();
+ }
+
+ /**
+ * Gets the example drawable attribute value.
+ * @return The example drawable attribute value.
+ */
+ public Drawable getExampleDrawable() {
+ return mExampleDrawable;
+ }
+
+ /**
+ * Sets the view's example drawable attribute value. In the example view, this drawable is
+ * drawn above the text.
+ * @param exampleDrawable The example drawable attribute value to use.
+ */
+ public void setExampleDrawable(Drawable exampleDrawable) {
+ mExampleDrawable = exampleDrawable;
+ }
+}