From fbf5097b8bb763a850bf027fcb09a5de8b7726cf Mon Sep 17 00:00:00 2001 From: Chris Broadfoot Date: Wed, 22 Oct 2014 15:33:04 +1100 Subject: [PATCH] Add "IconGenerator.setColor", add xxhdpi resources --- .../utils/demo/IconGeneratorDemoActivity.java | 5 +- library/res/drawable-xhdpi/bubble_blue.9.png | Bin 847 -> 0 bytes library/res/drawable-xhdpi/bubble_green.9.png | Bin 832 -> 0 bytes library/res/drawable-xhdpi/bubble_mask.9.png | Bin 0 -> 20049 bytes .../res/drawable-xhdpi/bubble_orange.9.png | Bin 834 -> 0 bytes .../res/drawable-xhdpi/bubble_purple.9.png | Bin 853 -> 0 bytes library/res/drawable-xhdpi/bubble_red.9.png | Bin 809 -> 0 bytes .../res/drawable-xhdpi/bubble_shadow.9.png | Bin 0 -> 20399 bytes library/res/drawable-xhdpi/bubble_white.9.png | Bin 917 -> 0 bytes library/res/drawable-xxhdpi/bubble_mask.9.png | Bin 0 -> 20179 bytes .../res/drawable-xxhdpi/bubble_shadow.9.png | Bin 0 -> 20783 bytes library/res/layout/text_bubble.xml | 4 +- .../maps/android/ui/BubbleDrawable.java | 81 ++++++++++++++++++ .../google/maps/android/ui/IconGenerator.java | 29 +++++-- 14 files changed, 106 insertions(+), 13 deletions(-) delete mode 100644 library/res/drawable-xhdpi/bubble_blue.9.png delete mode 100644 library/res/drawable-xhdpi/bubble_green.9.png create mode 100644 library/res/drawable-xhdpi/bubble_mask.9.png delete mode 100644 library/res/drawable-xhdpi/bubble_orange.9.png delete mode 100644 library/res/drawable-xhdpi/bubble_purple.9.png delete mode 100644 library/res/drawable-xhdpi/bubble_red.9.png create mode 100644 library/res/drawable-xhdpi/bubble_shadow.9.png delete mode 100644 library/res/drawable-xhdpi/bubble_white.9.png create mode 100644 library/res/drawable-xxhdpi/bubble_mask.9.png create mode 100644 library/res/drawable-xxhdpi/bubble_shadow.9.png create mode 100644 library/src/com/google/maps/android/ui/BubbleDrawable.java diff --git a/demo/src/com/google/maps/android/utils/demo/IconGeneratorDemoActivity.java b/demo/src/com/google/maps/android/utils/demo/IconGeneratorDemoActivity.java index ad82d77de..0d2f95e8d 100644 --- a/demo/src/com/google/maps/android/utils/demo/IconGeneratorDemoActivity.java +++ b/demo/src/com/google/maps/android/utils/demo/IconGeneratorDemoActivity.java @@ -1,5 +1,6 @@ package com.google.maps.android.utils.demo; +import android.graphics.Color; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; @@ -15,8 +16,8 @@ protected void startDemo() { IconGenerator iconFactory = new IconGenerator(this); addIcon(iconFactory, "Default", new LatLng(-33.8696, 151.2094)); - iconFactory.setStyle(IconGenerator.STYLE_BLUE); - addIcon(iconFactory, "Blue style", new LatLng(-33.9360, 151.2070)); + iconFactory.setColor(Color.CYAN); + addIcon(iconFactory, "Custom color", new LatLng(-33.9360, 151.2070)); iconFactory.setRotation(90); iconFactory.setStyle(IconGenerator.STYLE_RED); diff --git a/library/res/drawable-xhdpi/bubble_blue.9.png b/library/res/drawable-xhdpi/bubble_blue.9.png deleted file mode 100644 index 4e8e57a77316caaba80a81ae010b5abf9945ba2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmV-V1F-ywP)wdFeY}AWa@qOu?aR#fW&zY#H-J&GQOwDhv5;mV z#t;ca3SlGCF@eoFC%6VHDw4=~5|KgV5Jf~8QHcr4oO6zANODa|ZJggoo`cp9b;KOP zMKnenF6Ub3+$&s*&9x~zN#yVtVhZxb23%S9VCB_kc+mL)4?lHd0m_wfrrfCpszugh zt2$XpW`7DA=g!0Go3F7UXE#s{REs1l&ox@Zo~DdAs`M6gAn6}jn{agU4A$mwjYFNP z1UJ7L9@$lGNb*57$)1(tT6>Ato|fWCQ5XMj-H4)^WP>kqt)Ypsd92PsyYovsqS~FG zJPpfSYiOdLU;Cz5asDa4SZQdrRa@ zxkt2*`hUae^s(V=B3f|c>5F|Mf?`oj8GEk{rxV47bI_eRB~eApfSqZ=otN(;Cy8QE zEQ%>(I|sEhAM`8CVNR+BrRqG6;f)AK{Dz1jPfC$vALv(@Fnz5c3OLm~3v2JbDJO}1 zl5a^;L3O{`PqNbdmZxEUVFB)c_^ym3@c7s^p6XdF5>jrRxrV~ zg)iBYCOF18#N2$cN{ExNcnov&A{|6N zq^~Udwm=gLk~Jyx%*|)d2PTQ00XWU$UOSS4WYK6of;a(o)*VP=39XcM#k0~!LPwH< zWTpPz9ZS_#Um8nlrB>i>meQG|a2iV!trV@s(o8Ewqp>vAN-8wg3@qMW5;{p}CH$?S zR#K(0reW#vGF*Rhm;Y{BYNcVx%5bwj&L|j?b|>o)lauA&hNM0AU1NqIW5#x}Zp<;T Z{Q;CQ@Bae9BGLc=002ovPDHLkV1mFSi&_8x diff --git a/library/res/drawable-xhdpi/bubble_green.9.png b/library/res/drawable-xhdpi/bubble_green.9.png deleted file mode 100644 index e6ceb5ddd055a5649d10efa1741a65e871bcb0cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 832 zcmV-G1Hb%jp3?Hi|hpa~9GPiZMk} zkydz$OibW0=Ok-LL`4#urxX*4oT8{GDatWHi8<$3Ly9#SwQ;_YJcCvhHN~Q$u4s%n z>ddvq+{>)RV{OJx5*(ga%x3e_SbZ#=2V3%G{k{C$_#oXl0J$P(ruZkTYk8SvTew*!}|k04~`1`myT(0000< KMNUMnLSTZsmX16C diff --git a/library/res/drawable-xhdpi/bubble_mask.9.png b/library/res/drawable-xhdpi/bubble_mask.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9fea79ab878969b2355f4ea1442a29feae762d50 GIT binary patch literal 20049 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 M07*qoM6N<$g5|x8Z~y=R diff --git a/library/res/drawable-xhdpi/bubble_purple.9.png b/library/res/drawable-xhdpi/bubble_purple.9.png deleted file mode 100644 index 04afe98d4e414a0079f8369acd0ca1c5daf9572b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmV-b1FHOqP);5>y0L zL9NeGWv(UWo?|TrYg2ZT;P8}SJQdB@e1YCtU{E5#avy`Cn#&pA8=9Z0f~wSF=>d|qlZSz}M9 zD$M4Wmm|BV3rQAG6MI&YweBTe_p~S{MG5b>ZbYFbHuwx{bxf4Ov07QGto+rDD5>cW zr(u@0IwmT{QCiiFBny-dIo7%-QSAfu_WYU=qqszaje z%DknaGHjgF49;~b09_+Y}x-s#r^|1W@yEMZM4>j%$ z@TsE&>k?FIk zV1jMJ7kknmV}t@8H;b$x!I`ulB-+r0blf~1xeNbKp_bhR=k#9UT{hj zbP#;dSAxES0Zq(K)-d$Uo#Lz4-I9d=$bY9e?zJPyP8LSsbiSle1D0pU18 zA7LFyvXd3H?vA2=8l7k?YNdwlZWh&%~#?nnIxuUUj)k-Qf*5usSd=olp zTPw{sb<|3#G*+Qmcz*9z;l%^KZdz)kUdf8HS)V4-K1sWib%f+3_}eFGpMBSWPmpiE f?PP6_qig#IU`WuO+nRSN00000NkvXXu0mjfV-}Aw diff --git a/library/res/drawable-xhdpi/bubble_red.9.png b/library/res/drawable-xhdpi/bubble_red.9.png deleted file mode 100644 index 02911e0733cb0ce5e895e5f6b294cc7c3a350a60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 809 zcmV+^1J?YBP)meh`45~O^&ikehho+sh0fw2f@8D@3Q6aP zprgB!N=rzGJb_E`Be|Za_i$f$A=5qQ`Q4NEea?HqOtc*NR^l!0$qzqVMgSN9frzzB*(SqVQCnWCZjQ^H!`9{(?AxO19CwAjb~1K z&1&xnX$ec4v6B=AJ_1v5$XB3Tg+>i-enZO(S%aG@G%8Szx8Y4mQ`pqW8WR1fC0IU! z3$MU=D39P`36=$GL>dFnJxx&{5r@1DkQ}fsCtw~(O5?LmRZzt*U4boIAa$|=TdG;Z z()yTreKbPq6xk{?Yy(w=h6;RKT3v$*tF6w};ID0CDR(I`gtAXWqH%B`0A12rg}b z^vm#FFJS5P;L`N;;NE%EHk1$Hyau-(D%`h+aK7EgdDQ<=+ zQENXn;Y{{p!rAN0JPD+LOcV+SaMEu`2XGQ?1IlRa5FA?v5!acH^<+m5PqLS;%Hct~{14Ua7Ah%Qmmn7msDD zS2E$TGMlhghh`m`o3Li1S2E?XrhmZKpYTn8H!Ho;b74hQtUoJ9eMk?(dM7wB{q`X} nG4C4i0r}y_ebMrG_8k8Jl=MzHI$y+r00000NkvXXu0mjf;FxC% diff --git a/library/res/drawable-xhdpi/bubble_shadow.9.png b/library/res/drawable-xhdpi/bubble_shadow.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9ffe1bddb64c0c2459c7ab1ab22d3f1aeaa55c55 GIT binary patch literal 20399 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 rR2M*6g3?)Y2ws93`kzVQEpA%B8ZTu9C_YS9Qyp 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 T7 + android:paddingTop="5dp"/> diff --git a/library/src/com/google/maps/android/ui/BubbleDrawable.java b/library/src/com/google/maps/android/ui/BubbleDrawable.java new file mode 100644 index 000000000..79369cd49 --- /dev/null +++ b/library/src/com/google/maps/android/ui/BubbleDrawable.java @@ -0,0 +1,81 @@ +/* + * Copyright 2013 Google Inc. + * + * 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.google.maps.android.ui; + +import android.content.res.Resources; +import android.graphics.*; +import android.graphics.drawable.Drawable; + +import com.google.maps.android.R; + +/** + * Draws a bubble with a shadow, filled with any color. + */ +class BubbleDrawable extends Drawable { + + private final Drawable mShadow; + private final Drawable mMask; + private int mColor = Color.WHITE; + + public BubbleDrawable(Resources res) { + mMask = res.getDrawable(R.drawable.bubble_mask); + mShadow = res.getDrawable(R.drawable.bubble_shadow); + } + + public void setColor(int color) { + mColor = color; + } + + @Override + public void draw(Canvas canvas) { + mMask.draw(canvas); + canvas.drawColor(mColor, PorterDuff.Mode.SRC_IN); + mShadow.draw(canvas); + } + + @Override + public void setAlpha(int alpha) { + throw new UnsupportedOperationException(); + } + + @Override + public void setColorFilter(ColorFilter cf) { + throw new UnsupportedOperationException(); + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } + + @Override + public void setBounds(int left, int top, int right, int bottom) { + mMask.setBounds(left, top, right, bottom); + mShadow.setBounds(left, top, right, bottom); + } + + @Override + public void setBounds(Rect bounds) { + mMask.setBounds(bounds); + mShadow.setBounds(bounds); + } + + @Override + public boolean getPadding(Rect padding) { + return mMask.getPadding(padding); + } +} diff --git a/library/src/com/google/maps/android/ui/IconGenerator.java b/library/src/com/google/maps/android/ui/IconGenerator.java index 78f2af198..4a95f4d5f 100644 --- a/library/src/com/google/maps/android/ui/IconGenerator.java +++ b/library/src/com/google/maps/android/ui/IconGenerator.java @@ -50,12 +50,14 @@ public class IconGenerator { private float mAnchorU = 0.5f; private float mAnchorV = 1f; + private BubbleDrawable mBackground; /** * Creates a new IconGenerator with the default style. */ public IconGenerator(Context context) { mContext = context; + mBackground = new BubbleDrawable(mContext.getResources()); } /** @@ -208,10 +210,20 @@ public void setTextAppearance(int resid) { * Sets the style of the icon. The style consists of a background and text appearance. */ public void setStyle(int style) { - setBackground(mContext.getResources().getDrawable(getBackground(style))); + setColor(getStyleColor(style)); setTextAppearance(mContext, getTextStyle(style)); } + /** + * Sets the background to the default, with a given color tint. + * + * @param color the color for the background tint. + */ + public void setColor(int color) { + mBackground.setColor(color); + setBackground(mBackground); + } + /** * Set the background to a given Drawable, or remove the background. * @@ -249,6 +261,7 @@ private void ensureViewsSetUp() { mContainer = (ViewGroup) LayoutInflater.from(mContext).inflate(R.layout.text_bubble, null); mRotationLayout = (RotationLayout) mContainer.getChildAt(0); mContentView = mTextView = (TextView) mRotationLayout.findViewById(R.id.text); + setStyle(STYLE_DEFAULT); } } @@ -274,22 +287,22 @@ public void setContentPadding(int left, int top, int right, int bottom) { public static final int STYLE_PURPLE = 6; public static final int STYLE_ORANGE = 7; - private static int getBackground(int style) { + private static int getStyleColor(int style) { switch (style) { default: case STYLE_DEFAULT: case STYLE_WHITE: - return R.drawable.bubble_white; + return 0xffffffff; case STYLE_RED: - return R.drawable.bubble_red; + return 0xffcc0000; case STYLE_BLUE: - return R.drawable.bubble_blue; + return 0xff0099cc; case STYLE_GREEN: - return R.drawable.bubble_green; + return 0xff669900; case STYLE_PURPLE: - return R.drawable.bubble_purple; + return 0xff9933cc; case STYLE_ORANGE: - return R.drawable.bubble_orange; + return 0xffff8800; } }