├── .idea
└── ant.xml
├── README.md
├── example.png
├── library
├── .DS_Store
├── AndroidManifest.xml
├── ShowcaseView.iml
├── project.properties
├── res
│ ├── .DS_Store
│ ├── drawable-hdpi
│ │ ├── btn_cling_normal.9.png
│ │ ├── btn_cling_pressed.9.png
│ │ ├── cling.png
│ │ └── ic_launcher.png
│ ├── drawable-ldpi
│ │ └── ic_launcher.png
│ ├── drawable-mdpi
│ │ ├── btn_cling_normal.9.png
│ │ ├── btn_cling_pressed.9.png
│ │ ├── cling.png
│ │ └── ic_launcher.png
│ ├── drawable-xhdpi
│ │ ├── btn_cling_normal.9.png
│ │ ├── btn_cling_pressed.9.png
│ │ ├── cling.png
│ │ └── ic_launcher.png
│ ├── drawable
│ │ └── cling_button_bg.xml
│ ├── layout
│ │ └── main.xml
│ └── values
│ │ ├── .DS_Store
│ │ ├── attrs.xml
│ │ ├── ids.xml
│ │ ├── strings.xml
│ │ └── styles.xml
└── src
│ └── com
│ ├── .DS_Store
│ └── espian
│ └── showcaseview
│ └── ShowcaseView.java
└── sample
├── AndroidManifest.xml
├── Showcase Sample.iml
├── gen
└── com
│ └── espian
│ └── showcaseview
│ └── sample
│ ├── BuildConfig.java
│ ├── Manifest.java
│ └── R.java
├── project.properties
├── res
├── drawable-hdpi
│ └── ic_launcher.png
├── drawable-ldpi
│ └── ic_launcher.png
├── drawable-mdpi
│ └── ic_launcher.png
├── drawable-xhdpi
│ └── ic_launcher.png
├── layout
│ └── main.xml
└── values
│ ├── strings.xml
│ └── styles.xml
└── src
└── com
└── espian
└── showcaseview
└── sample
└── SampleActivity.java
/.idea/ant.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Showcase View library
2 | ====
3 |
4 | The ShowcaseView library is designed to highlight and showcase specific parts of apps to the user with a distinctive and attractive overlay. This library is great for pointing out points of interest for users, or obscure but useful items.
5 |
6 | The library is based on the "Cling" view found in the Launcher on Ice-Cream Sandwich and Jelly Bean, but extended to be easier to use.
7 |
8 | 
9 |
10 | Usage
11 | ----
12 |
13 | To achieve a full-screen overlay, place a ShowcaseView as high in your layout's view hierarchy as you can. To set the view to showcase, call `ShowcaseView.setShowcaseView(..)`. By default, the ShowcaseView will show every time the layout is shown, but this can be altered by calling `ShowcaseView.setShotType(..)` before `setShowcaseView(..)`. Using `TYPE_ONE_SHOT` will only show the ShowcaseView the first time the layout is shown.
14 |
15 | As ShowcaseView extends a RelativeLayout, you can add items to the ShowcaseView, such as a button to hide it or text to explain what you are showcasing. If you give the button the id "@id/showcase_button", it will, by default, close the ShowcaseView once pressed. This behaviour can be overridden by using `ShowcaseView.overrideButtonClick(..)`.
16 |
17 | Styles are included to maintain consistently in ShowcaseViews. Buttons should use the style ShowcaseButton, with title text using ShowcaseTitleText and standard text using ShowcaseText.
18 |
19 | By default, the ShowcaseView will block all touch events except inside the showcased circle. To override this, simply call `ShowcaseView.blockNonShowcasedTouches(false)`.
20 |
21 | Upcoming features
22 | ----
23 |
24 | At the moment, this library is quite bare. However, I hope to add the following features very soon:
25 | - ~~Support for showcasing raw co-ordinates~~ _Use `setShowcasePosition(x,y)`_
26 | - Support for showcasing ActionBar items
27 | - Variable sized circles for showcasing
28 | - Easier usage
29 | - ~~On-demand showing and hiding of ShowcaseView~~ _Use `show()` and `hide()`_
30 |
31 | Copyright and Licensing
32 | ----
33 |
34 | Copyright Alex Curran © 2012. All rights reserved.
35 |
36 | This library is disributed under an Apache 2.0 License.
--------------------------------------------------------------------------------
/example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/example.png
--------------------------------------------------------------------------------
/library/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/.DS_Store
--------------------------------------------------------------------------------
/library/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/library/ShowcaseView.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | /res-overlay
28 |
29 | true
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/library/project.properties:
--------------------------------------------------------------------------------
1 | # This file is automatically generated by Android Tools.
2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3 | #
4 | # This file must be checked in Version Control Systems.
5 | #
6 | # To customize properties used by the Ant build system edit
7 | # "ant.properties", and override values to adapt the script to your
8 | # project structure.
9 | #
10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
12 |
13 | android.library=true
14 | # Project target.
15 | target=android-16
16 |
--------------------------------------------------------------------------------
/library/res/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/.DS_Store
--------------------------------------------------------------------------------
/library/res/drawable-hdpi/btn_cling_normal.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/drawable-hdpi/btn_cling_normal.9.png
--------------------------------------------------------------------------------
/library/res/drawable-hdpi/btn_cling_pressed.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/drawable-hdpi/btn_cling_pressed.9.png
--------------------------------------------------------------------------------
/library/res/drawable-hdpi/cling.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/drawable-hdpi/cling.png
--------------------------------------------------------------------------------
/library/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/library/res/drawable-ldpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/drawable-ldpi/ic_launcher.png
--------------------------------------------------------------------------------
/library/res/drawable-mdpi/btn_cling_normal.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/drawable-mdpi/btn_cling_normal.9.png
--------------------------------------------------------------------------------
/library/res/drawable-mdpi/btn_cling_pressed.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/drawable-mdpi/btn_cling_pressed.9.png
--------------------------------------------------------------------------------
/library/res/drawable-mdpi/cling.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/drawable-mdpi/cling.png
--------------------------------------------------------------------------------
/library/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/library/res/drawable-xhdpi/btn_cling_normal.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/drawable-xhdpi/btn_cling_normal.9.png
--------------------------------------------------------------------------------
/library/res/drawable-xhdpi/btn_cling_pressed.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/drawable-xhdpi/btn_cling_pressed.9.png
--------------------------------------------------------------------------------
/library/res/drawable-xhdpi/cling.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/drawable-xhdpi/cling.png
--------------------------------------------------------------------------------
/library/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/library/res/drawable/cling_button_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/library/res/layout/main.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/library/res/values/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/res/values/.DS_Store
--------------------------------------------------------------------------------
/library/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/library/res/values/ids.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/library/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | ACTIVITY_ENTRY_NAME
4 |
5 |
--------------------------------------------------------------------------------
/library/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
23 |
31 |
--------------------------------------------------------------------------------
/library/src/com/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/library/src/com/.DS_Store
--------------------------------------------------------------------------------
/library/src/com/espian/showcaseview/ShowcaseView.java:
--------------------------------------------------------------------------------
1 | package com.espian.showcaseview;
2 |
3 | import android.animation.Animator;
4 | import android.animation.ObjectAnimator;
5 | import android.content.Context;
6 | import android.content.SharedPreferences;
7 | import android.content.res.TypedArray;
8 | import android.graphics.*;
9 | import android.graphics.drawable.Drawable;
10 | import android.os.Build;
11 | import android.util.AttributeSet;
12 | import android.util.Log;
13 | import android.view.MotionEvent;
14 | import android.view.View;
15 | import android.widget.RelativeLayout;
16 |
17 | /**
18 | * A view which allows you to showcase areas of your app with an explanation.
19 | */
20 | public class ShowcaseView extends RelativeLayout implements
21 | View.OnClickListener, View.OnTouchListener {
22 |
23 | public static final int TYPE_NO_LIMIT = 0;
24 | public static final int TYPE_ONE_SHOT = 1;
25 |
26 | private final String INTERNAL_PREFS = "showcase_internal";
27 | private final String SHOT_PREF_STORE = "hasShot";
28 |
29 | float showcaseX = -1, showcaseY = -1;
30 | int shotType = TYPE_NO_LIMIT;
31 | boolean isRedundant = false;
32 | boolean block = true;
33 | float showcaseRadius = -1;
34 |
35 | Paint background;
36 | int backColor;
37 | Drawable showcase;
38 | View mButton;
39 | OnClickListener mListener;
40 | OnShowcaseEventListener mEventListener;
41 |
42 | public ShowcaseView(Context context) {
43 | this(context, null, 0);
44 | }
45 |
46 | public ShowcaseView(Context context, AttributeSet attrs) {
47 | this(context, attrs, 0);
48 | }
49 |
50 | public ShowcaseView(Context context, AttributeSet attrs, int defStyle) {
51 | super(context, attrs, defStyle);
52 | if (attrs != null) {
53 | TypedArray styled = getContext().obtainStyledAttributes(attrs,
54 | R.styleable.ShowcaseView, defStyle, 0);
55 | int reference = Color.argb(128, 80, 80, 80);
56 | backColor = styled.getInt(R.styleable.ShowcaseView_backgroundColor,
57 | Color.argb(128, 80, 80, 80));
58 | styled.recycle();
59 | }
60 | }
61 |
62 | private void init() {
63 | boolean hasShot = getContext().getSharedPreferences(INTERNAL_PREFS,
64 | Context.MODE_PRIVATE).getBoolean(SHOT_PREF_STORE, false);
65 | if (hasShot && shotType == TYPE_ONE_SHOT) {
66 | // The showcase has already been shot once, so we don't need to do
67 | // anything
68 | setVisibility(View.GONE);
69 | isRedundant = true;
70 | return;
71 | }
72 | background = new Paint();
73 | background.setColor(backColor);
74 | showcase = getContext().getResources().getDrawable(R.drawable.cling);
75 | mButton = findViewById(R.id.showcase_button);
76 | if (mButton != null) {
77 | mButton.setOnClickListener(this);
78 | }
79 | float dens = getResources().getDisplayMetrics().density;
80 | showcaseRadius = dens * 94;
81 | setOnTouchListener(this);
82 | }
83 |
84 | /**
85 | * Set the view to showcase
86 | *
87 | * @param view
88 | * The {@link View} to showcase.
89 | */
90 | public void setShowcaseView(final View view) {
91 | if (isRedundant || view == null) {
92 | isRedundant = true;
93 | return;
94 | }
95 | isRedundant = false;
96 |
97 | view.post(new Runnable() {
98 | @Override
99 | public void run() {
100 | init();
101 | showcaseX = (float) (view.getLeft() + view.getWidth() / 2);
102 | showcaseY = (float) (view.getTop() + view.getHeight() / 2);
103 | invalidate();
104 | }
105 | });
106 | }
107 |
108 | /**
109 | * Set a specific position to showcase
110 | *
111 | * @param x
112 | * @param y
113 | */
114 | public void setShowcasePosition(float x, float y) {
115 | if (isRedundant) {
116 | return;
117 | }
118 | init();
119 | showcaseX = x;
120 | showcaseY = y;
121 | invalidate();
122 | }
123 |
124 | /**
125 | * Set the shot method of the showcase - only once or no limit
126 | *
127 | * @param shotType
128 | * either TYPE_ONE_SHOT or TYPE_NO_LIMIT
129 | */
130 | public void setShotType(int shotType) {
131 | if (shotType == TYPE_NO_LIMIT || shotType == TYPE_ONE_SHOT) {
132 | this.shotType = shotType;
133 | }
134 | }
135 |
136 | /**
137 | * Decide whether touches outside the showcased circle should be ignored or
138 | * not
139 | *
140 | * @param block
141 | * true to block touches, false otherwise. By default, this is
142 | * true.
143 | */
144 | public void blockNonShowcasedTouches(boolean block) {
145 | this.block = block;
146 | }
147 |
148 | /**
149 | * Override the standard button click event, if there is a button available
150 | *
151 | * @param listener
152 | * Listener to listen to on click events
153 | */
154 | public void overrideButtonClick(OnClickListener listener) {
155 | if (isRedundant) {
156 | return;
157 | }
158 | if (mButton != null) {
159 | mButton.setOnClickListener(listener);
160 | }
161 | }
162 |
163 | public void setOnShowcaseEventListener(OnShowcaseEventListener listener) {
164 | mEventListener = listener;
165 | }
166 |
167 | public void removeOnShowcaseEventListener() {
168 | setOnClickListener(null);
169 | }
170 |
171 | @Override
172 | public void dispatchDraw(Canvas canvas) {
173 | if (showcaseX < 0 || showcaseY < 0 || isRedundant) {
174 | super.dispatchDraw(canvas);
175 | return;
176 | }
177 |
178 | Bitmap b = Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(),
179 | Bitmap.Config.ARGB_8888);
180 | Canvas c = new Canvas(b);
181 |
182 | // Draw the semi-transparent background
183 | c.drawColor(backColor);
184 |
185 | // Erase the area for the ring
186 | Paint eraser = new Paint();
187 | eraser.setColor(0xFFFFFF);
188 | eraser.setAlpha(0);
189 | eraser.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));
190 | c.drawCircle(0, showcaseY, showcaseRadius, eraser);
191 |
192 | int cx = (int) showcaseX, cy = (int) showcaseY;
193 |
194 | int dw = showcase.getIntrinsicWidth();
195 | int dh = showcase.getIntrinsicHeight();
196 |
197 | Log.d("ShowcaseView", "dw: " + dw + " dh: " + dh);
198 |
199 | showcase.setBounds(cx - dw / 2, cy - dh / 2, cx + dw / 2, cy + dh / 2);
200 | // showcase.setBounds(-(dw), cy - dh / 2, cy - 25, cy + dh / 2);
201 | // showcase.setBounds(-(int) showcaseX, cy - dh / 2, cx + dw / 2, cy
202 | // + dh / 2);
203 | showcase.draw(c);
204 |
205 | canvas.drawBitmap(b, 0, 0, null);
206 | // c.setBitmap(null);
207 | b = null;
208 |
209 | super.dispatchDraw(canvas);
210 |
211 | }
212 |
213 | @Override
214 | public void onClick(View view) {
215 | // If the type is set to one-shot, store that it has shot
216 | if (shotType == TYPE_ONE_SHOT) {
217 | SharedPreferences internal = getContext().getSharedPreferences(
218 | "showcase_internal", Context.MODE_PRIVATE);
219 | internal.edit().putBoolean("hasShot", true).commit();
220 | }
221 |
222 | if (mListener == null) {
223 | hide();
224 | } else {
225 | mListener.onClick(view);
226 | }
227 | }
228 |
229 | public void hide() {
230 | if (mEventListener != null) {
231 | mEventListener.onShowcaseViewHide(this);
232 | }
233 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
234 | ObjectAnimator oa = ObjectAnimator.ofFloat(this, "alpha", 0f);
235 | oa.setDuration(300).addListener(new Animator.AnimatorListener() {
236 | @Override
237 | public void onAnimationStart(Animator animator) {
238 | }
239 |
240 | @Override
241 | public void onAnimationEnd(Animator animator) {
242 | setVisibility(View.GONE);
243 | }
244 |
245 | @Override
246 | public void onAnimationCancel(Animator animator) {
247 | }
248 |
249 | @Override
250 | public void onAnimationRepeat(Animator animator) {
251 | }
252 | });
253 | oa.start();
254 | } else {
255 | setVisibility(View.GONE);
256 | }
257 | }
258 |
259 | public void show() {
260 | if (mEventListener != null) {
261 | mEventListener.onShowcaseViewShow(this);
262 | }
263 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
264 | ObjectAnimator oa = ObjectAnimator.ofFloat(this, "alpha", 1f);
265 | oa.setDuration(300).addListener(new Animator.AnimatorListener() {
266 | @Override
267 | public void onAnimationStart(Animator animator) {
268 | setVisibility(View.VISIBLE);
269 | }
270 |
271 | @Override
272 | public void onAnimationEnd(Animator animator) {
273 | }
274 |
275 | @Override
276 | public void onAnimationCancel(Animator animator) {
277 | }
278 |
279 | @Override
280 | public void onAnimationRepeat(Animator animator) {
281 | }
282 | });
283 | oa.start();
284 | } else {
285 | setVisibility(View.VISIBLE);
286 | }
287 | }
288 |
289 | @Override
290 | public boolean onTouch(View view, MotionEvent motionEvent) {
291 | if (!block) {
292 | return false;
293 | } else {
294 | float xDelta = Math.abs(motionEvent.getRawX() - showcaseX);
295 | float yDelta = Math.abs(motionEvent.getRawY() - showcaseY);
296 | double distanceFromFocus = Math.sqrt(Math.pow(xDelta, 2)
297 | + Math.pow(yDelta, 2));
298 | return distanceFromFocus > showcaseRadius;
299 | }
300 | }
301 |
302 | public interface OnShowcaseEventListener {
303 |
304 | public void onShowcaseViewHide(ShowcaseView showcaseView);
305 |
306 | public void onShowcaseViewShow(ShowcaseView showcaseView);
307 |
308 | }
309 |
310 | }
311 |
--------------------------------------------------------------------------------
/sample/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/sample/Showcase Sample.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | /res-overlay
28 |
29 | true
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/sample/gen/com/espian/showcaseview/sample/BuildConfig.java:
--------------------------------------------------------------------------------
1 | /** Automatically generated file. DO NOT MODIFY */
2 | package com.espian.showcaseview.sample;
3 |
4 | public final class BuildConfig {
5 | public final static boolean DEBUG = true;
6 | }
--------------------------------------------------------------------------------
/sample/gen/com/espian/showcaseview/sample/Manifest.java:
--------------------------------------------------------------------------------
1 | package com.espian.showcaseview.sample;
2 |
3 | /* This stub is for using by IDE only. It is NOT the Manifest class actually packed into APK */
4 | public final class Manifest {
5 | }
--------------------------------------------------------------------------------
/sample/gen/com/espian/showcaseview/sample/R.java:
--------------------------------------------------------------------------------
1 | /* AUTO-GENERATED FILE. DO NOT MODIFY.
2 | *
3 | * This class was automatically generated by the
4 | * aapt tool from the resource data it found. It
5 | * should not be modified by hand.
6 | */
7 |
8 | package com.espian.showcaseview.sample;
9 |
10 | public final class R {
11 | public static final class attr {
12 | }
13 |
14 | public static final class drawable {
15 | public static final int btn_cling_normal = 0x7f020000;
16 | public static final int btn_cling_pressed = 0x7f020001;
17 | public static final int cling = 0x7f020002;
18 | public static final int cling_button_bg = 0x7f020003;
19 | public static final int ic_launcher = 0x7f020004;
20 | }
21 |
22 | public static final class id {
23 | public static final int button = 0x7f040001;
24 | public static final int showcase = 0x7f040002;
25 | public static final int showcase_button = 0x7f040000;
26 | public static final int textView = 0x7f040003;
27 | public static final int textView1 = 0x7f040004;
28 | }
29 |
30 | public static final class layout {
31 | public static final int main = 0x7f030000;
32 | }
33 |
34 | public static final class string {
35 | public static final int app_name = 0x7f050000;
36 | }
37 |
38 | public static final class style {
39 | public static final int ClingButton = 0x7f060000;
40 | public static final int ClingText = 0x7f060002;
41 | public static final int ClingTitleText = 0x7f060001;
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/sample/project.properties:
--------------------------------------------------------------------------------
1 | # This file is automatically generated by Android Tools.
2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3 | #
4 | # This file must be checked in Version Control Systems.
5 | #
6 | # To customize properties used by the Ant build system edit
7 | # "ant.properties", and override values to adapt the script to your
8 | # project structure.
9 | #
10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
12 |
13 | # Project target.
14 | target=android-16
15 | android.library.reference.1=../library
16 |
17 |
--------------------------------------------------------------------------------
/sample/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/sample/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/sample/res/drawable-ldpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/sample/res/drawable-ldpi/ic_launcher.png
--------------------------------------------------------------------------------
/sample/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/sample/res/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/sample/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JesusM/ShowcaseViewLibrary/417208bf336bfb5f087de38d26b4ddb660b8c8a7/sample/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/sample/res/layout/main.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
8 |
11 |
13 |
16 |
20 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/sample/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | SampleActivity
4 | Hide showcase
5 | Show showcase
6 | Blocked button
7 |
8 |
--------------------------------------------------------------------------------
/sample/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
22 |
30 |
--------------------------------------------------------------------------------
/sample/src/com/espian/showcaseview/sample/SampleActivity.java:
--------------------------------------------------------------------------------
1 | package com.espian.showcaseview.sample;
2 |
3 | import android.app.Activity;
4 | import android.os.Bundle;
5 | import android.view.View;
6 | import android.widget.Button;
7 | import com.espian.showcaseview.ShowcaseView;
8 |
9 | public class SampleActivity extends Activity implements View.OnClickListener,
10 | ShowcaseView.OnShowcaseEventListener {
11 |
12 | ShowcaseView sv;
13 | Button button;
14 |
15 | /**
16 | * Called when the activity is first created.
17 | */
18 | @Override
19 | public void onCreate(Bundle savedInstanceState) {
20 | super.onCreate(savedInstanceState);
21 | setContentView(R.layout.main);
22 | sv = (ShowcaseView) findViewById(R.id.showcase);
23 | sv.setShowcaseView(findViewById(R.id.button));
24 | sv.setOnShowcaseEventListener(this);
25 | (button = (Button) findViewById(R.id.button)).setOnClickListener(this);
26 | }
27 |
28 | @Override
29 | public void onClick(View view) {
30 | if (sv.isShown()) {
31 | sv.hide();
32 | } else {
33 | sv.show();
34 | }
35 | }
36 |
37 | @Override
38 | public void onShowcaseViewHide(ShowcaseView showcaseView) {
39 | button.setText(R.string.button_show);
40 | }
41 |
42 | @Override
43 | public void onShowcaseViewShow(ShowcaseView showcaseView) {
44 | button.setText(R.string.button_hide);
45 | }
46 | }
47 |
--------------------------------------------------------------------------------