<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><description>A collection of links to bring a deeper understanding of the Android development</description><title>Effective Android</title><generator>Tumblr (3.0; @effectiveandroid)</generator><link>https://effectiveandroid.tumblr.com/</link><item><title>The Art of Open-Sourcing</title><description>&lt;a href="https://medium.com/@sumbulalvi/the-art-of-open-sourcing-c9b87e5905ee#.lmv7f95dv"&gt;The Art of Open-Sourcing&lt;/a&gt;: &lt;p&gt;An article by &lt;a class="tumblelog" href="https://tmblr.co/m9JTVScK3BxNX0sA7oUKiYQ"&gt;@vanillaburritos&lt;/a&gt; as a reflection of her experience open-sourcing &lt;a href="https://github.com/tumblr/PermissMe"&gt;PermissMe&lt;/a&gt; at Tumblr. Give it a read!&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/152040183147</link><guid>https://effectiveandroid.tumblr.com/post/152040183147</guid><pubDate>Wed, 19 Oct 2016 17:34:13 -0400</pubDate><category>android</category><category>permissme</category><category>open source</category><category>library</category><category>android sdk</category><category>github</category><category>tumblr staff</category><dc:creator>vanillaburritos</dc:creator></item><item><title>Dragging, Scaling, Rotating on April Fools Day</title><description>&lt;p&gt;The April Fools 2016 project was executed and finalized on a very tight deadline. The mobile platforms (Android, iOS) had only 2 weeks to ship a finalized, polished implementation from scratch. Originally, we planned on doing a full-blown custom election, where users would, themselves, be able to run as a candidates in the election, create their own campaign and be featured on a top Candidates page. However, we had to scope down the project as much as we could. Development had to occur while scoping the project and mocks were incomplete.&lt;/p&gt;&lt;p&gt;One of the biggest contributors to the success of the AF project were the new creator tools we provided. The campaign posters and campaign endorsements. &lt;/p&gt;&lt;p&gt;While creating the campaign poster creator on Android, there were 4 main actions to implement for users:&lt;br/&gt;1) Adding items to the poster&lt;br/&gt;2) Dragging items&lt;br/&gt;3) Scaling items&lt;br/&gt;4) Rotating items&lt;br/&gt;* &amp;ldquo;items&amp;rdquo; refers to text and stickers&lt;/p&gt;&lt;p&gt;I decided to structure the implementation as follows:&lt;br/&gt;image of activity -&amp;gt; layoutView -&amp;gt; canvas, with imageViews and textviews being added to the canvas, and the color picker being a separate ViewGroup.&lt;/p&gt;&lt;figure data-orig-width="447" data-orig-height="528" class="tmblr-full"&gt;&lt;img src="https://78.media.tumblr.com/fc989c614908bbf51b8153e6609c6d6d/tumblr_inline_o5wdq59zMw1smi4hu_540.png" alt="image" data-orig-width="447" data-orig-height="528"/&gt;&lt;/figure&gt;&lt;h2&gt;&lt;b&gt;&lt;br/&gt;&lt;/b&gt;&lt;/h2&gt;&lt;!-- more --&gt;&lt;h2&gt;&lt;b&gt;Adding Text and Stickers&lt;/b&gt;&lt;/h2&gt;&lt;p&gt;A custom CanvasLayout subclassing FrameLayout was the main drawing board. I added buttons in activity layout with click with the CanvasLayout through CanvasLayout.changeBackgroundTapped(), CanvasLayout.stickerTapped() or CanvasLayout.addTextTapped(). When the user taps the add-text button, CanvasLayout dynamically adds a TextView to the layout.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;public void addTextItem() {
  TextView textView = new TextView();
  textView.color = ...; 
  textView.properties = ...;
  textView.setFocusable(true);
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And similar for stickers, except adding ImageViews with selected drawables to the CanvasLayout view.&lt;/p&gt;&lt;figure data-orig-width="218" data-orig-height="387"&gt;&lt;img src="https://78.media.tumblr.com/3cfd1a077e99a0f795918cf055ee9698/tumblr_inline_o6005bHGNN1smi4hu_500.gif" alt="image" data-orig-width="218" data-orig-height="387"/&gt;&lt;/figure&gt;&lt;h2&gt;&lt;b&gt;Dealing with Touches&lt;/b&gt;&lt;br/&gt;&lt;/h2&gt;&lt;p&gt;Unfortunately, there&amp;rsquo;s no simple way to scale or rotate views on Android. I created a custom AFTextView subclassing TextView and a custom AFStickerView subclassing ImageView. These views intercept touch events and figure out what the user is trying to do. A simple overview of what the logic in onTouch() looked like:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;@Override
public onTouch(MotionEvent ev) {
  if (ev == TOUCH_DOWN) {
    // save the x &amp;amp; y position of the user's touch down!
  } elseif (ev == TOUCH_UP) {
    // reset the variables, the user just lifted their finger and doesn't want to do anything
  } elseif (ev == TOUCH_MOVE) {
    // we're either dragging, scaling or rotating, figure out which one!
  }
}&lt;/code&gt;

(For information on each event type, refer to &lt;a href="http://developer.android.com/intl/ko/reference/android/view/MotionEvent.html"&gt;MotionEvent reference docs&lt;/a&gt;)&lt;/pre&gt;&lt;p&gt;As you can probably tell, the most difficult part is figuring out what to do on ACTION_MOVE. I started off with scaling and dragging. The biggest difference between the two is: you need two fingers for scaling, you need one finger for dragging. So let&amp;rsquo;s keep track of each finger with an ID, mPointer1, mPointer2 and initialize them to -1. Then I checked whether we have one or two fingers down when I received a ACTION_MOVE event. Our onTouch() logic now is as follows:&lt;br/&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;@Override
public onTouch(MotionEvent ev) {
  if (ev == ACTION_DOWN) {
    mPointer1 = ev.getPointerId();
	// ... save the x &amp;amp; y position of first finger's touch down point
  } else if (ev == ACTION_UP) {
    // reset the variables, the user just lifted their finger and doesn't want to do anything
    mPointer1 = -1;
    mPointer2 = -1;
  } else if (ev == ACTION_MOVE) {
    if (mPointer2 == -1) {
      // only one finger down, we are dragging
    } else {
      // we're either scaling or rotating!
    }
  } else if (ev == ACTION_POINTER_DOWN) {
    mPointer2 = ev.getPointerId();
    // ... save x &amp;amp; y of second finger's touch down point
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We have a new event we are intercepting, ACTION_POINTER_DOWN. This event occurs when a second finger touches down on the view. We now know whether we are dragging or doing something else.&lt;/p&gt;&lt;figure data-orig-width="179" data-orig-height="317"&gt;&lt;img src="https://78.media.tumblr.com/7664024a8ab53d3e01921a6a97494876/tumblr_inline_o6002vqRJM1smi4hu_500.gif" alt="image" data-orig-width="179" data-orig-height="317"/&gt;&lt;/figure&gt;&lt;p&gt;Unfortunately, there is another problem. I want to be able to scale in the X direction (horizontally) and the Y direction (vertically) without caring about the aspect ratio.&lt;br/&gt;&lt;/p&gt;&lt;p&gt;It becomes impossible to figure out what the user is trying to do now. I decided the to intercept the touch events on the main CanvasLayout. On the CanvasLayout, if a rotation action is detected, a rotation is applied to the selected view. This brought us to the final onTouch() logic on the AFTextView and CanvasLayout:&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;AFTextView.java&lt;/b&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;@Override
public onTouch(MotionEvent ev) {
  if (ev == ACTION_DOWN) {
    mPointer1 = ev.getPointerId();
    ...
  } else if (ev == ACTION_UP) {
    mPointer1 = -1;
    mPointer2 = -1;
    ...
  } else if (ev == ACTION_MOVE) {
    if (mPointer2 == -1) {
      // only one finger down, we are dragging!
    } else {
      // two fingers down, we're  scaling!
    }
  } else if (ev == ACTION_POINTER_DOWN) {
    mPointer2 = ev.getPointerId();
    ...
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;b&gt;CanvasLayout.java&lt;/b&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;@Override
public onTouch(MotionEvent ev) {
  if (ev == ACTION_DOWN) {
    mPointer1 = ev.getPointerId();
    ...
  } else if (ev == ACTION_POINTER_DOWN) {
    mPointer2 = ev.getPointerId();
    ...
  } else if (ev == ACTION_MOVE) {
    // user is moving their first finger in the rotation gesture! 
    // calculate the angle between the second finger and this finger before &amp;amp; after this move
  } else if (ev == ACTION_UP) {
    // rotation is finished
  }
  return true;
}&lt;/code&gt;&lt;/pre&gt;&lt;figure data-orig-width="230" data-orig-height="408"&gt;&lt;img src="https://78.media.tumblr.com/75133aa22ed14f6de67c21421755fd2f/tumblr_inline_o5zzyaw63A1smi4hu_500.gif" alt="image" data-orig-width="230" data-orig-height="408"/&gt;&lt;/figure&gt;&lt;p&gt;Great, now we have all the logic in place to know when we need to scale, drag, and rotate our views. The details of how to manipulate the view accordingly warrants another post all together. Rotation in particular had me brushing up on my linear algebra to calculate the angle of change using 4 coordinates (2 coordinates for the position of the fingers before the rotation, 2 coordinates for the position of the fingers after rotation):&lt;br/&gt;&lt;/p&gt;&lt;figure data-orig-width="1080" data-orig-height="370" class="tmblr-full"&gt;&lt;img src="https://78.media.tumblr.com/cb6fa895046ab31e3184228fd2388a57/tumblr_inline_o5v3jeRzWa1smi4hu_540.png" alt="image" data-orig-width="1080" data-orig-height="370"/&gt;&lt;/figure&gt;&lt;p&gt;Another interesting (read: annoying) thing to deal with was the fact that what would be considered rotating +X degrees in the regular cartesian plane (counter-clockwise) is considered rotating -X degrees in Android views rotation. &lt;i&gt;Sigh&amp;hellip; &lt;/i&gt;&lt;/p&gt;&lt;p&gt;Anyway, after ironing out some bugs and use some touchSlops to make touches more realistic, the interaction with elements was looking great.&lt;/p&gt;&lt;p&gt;At the end of April Fools day, there had been &lt;b&gt;&lt;i&gt;tens of thousands of &lt;/i&gt;&lt;/b&gt;campaign posters created on Mobile. I think it&amp;rsquo;s safe to say users had a good time adding, dragging, scaling and rotating views for their favorite lizards.&lt;/p&gt;&lt;figure data-orig-width="1569" data-orig-height="943" class="tmblr-full"&gt;&lt;img src="https://78.media.tumblr.com/8e7977872c0b1053929b144481aa8c35/tumblr_inline_o5v453m84x1smi4hu_540.png" alt="image" data-orig-width="1569" data-orig-height="943"/&gt;&lt;/figure&gt;&lt;p&gt;- &lt;a href="https://tmblr.co/m9JTVScK3BxNX0sA7oUKiYQ"&gt;@vanillaburritos&lt;/a&gt;&lt;a&gt;&lt;/a&gt; , Android Engineer @ Tumblr&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/143176372647</link><guid>https://effectiveandroid.tumblr.com/post/143176372647</guid><pubDate>Thu, 21 Apr 2016 15:07:35 -0400</pubDate><category>decision2016</category><category>aprilfools2016</category><category>android</category><category>effectiveandroid</category><category>ontouch</category><category>wretchedtooth</category><category>mop</category><category>timefordeborah</category><category>rickforall</category><dc:creator>vanillaburritos</dc:creator></item><item><title>laughingsquid:

Pay What You Want: The Android Expert’s Coding...</title><description>&lt;img src="https://78.media.tumblr.com/72097859b73c15c9c6b8fe0370cc3c88/tumblr_nxpgn6b2n41qz4cuyo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a class="tumblr_blog" href="http://laughingsquid.tumblr.com/post/133084862998"&gt;laughingsquid&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://store.laughingsquid.com/sales/pay-what-you-want-android-elearning-bundle"&gt;Pay What You Want: The Android Expert’s Coding Bundle&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description><link>https://effectiveandroid.tumblr.com/post/133090369177</link><guid>https://effectiveandroid.tumblr.com/post/133090369177</guid><pubDate>Thu, 12 Nov 2015 16:45:39 -0500</pubDate><dc:creator>kevinthecity</dc:creator></item><item><title>Video</title><description>&lt;iframe src="https://player.vimeo.com/video/144877458?title=0&amp;byline=0&amp;portrait=0&amp;app_id=122963" width="400" height="225" frameborder="0" title="Jake Wharton - ADVANCING ANDROID DEVELOPMENT WITH THE KOTLIN LANGUAGE | Øredev 2015" webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;</description><link>https://effectiveandroid.tumblr.com/post/132741863892</link><guid>https://effectiveandroid.tumblr.com/post/132741863892</guid><pubDate>Sat, 07 Nov 2015 13:32:23 -0500</pubDate><category>kotlin</category><category>android</category><dc:creator>chenjyr</dc:creator></item><item><title>Someone asked me today how to add ink ripple¹ touch feedback to an image…</title><description>&lt;a href="https://plus.google.com/+NickButcher/posts/azEU6s4APbu"&gt;Someone asked me today how to add ink ripple¹ touch feedback to an image…&lt;/a&gt;</description><link>https://effectiveandroid.tumblr.com/post/121937666137</link><guid>https://effectiveandroid.tumblr.com/post/121937666137</guid><pubDate>Fri, 19 Jun 2015 14:54:28 -0400</pubDate><dc:creator>kevinthecity</dc:creator></item><item><title>Android Design Support Library | Android Developers Blog</title><description>&lt;a href="http://android-developers.blogspot.com/2015/05/android-design-support-library.html"&gt;Android Design Support Library | Android Developers Blog&lt;/a&gt;: &lt;p&gt;Have you checked this out yet? Definitely start getting familiar with it, a lot of great stuff.&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/121936642447</link><guid>https://effectiveandroid.tumblr.com/post/121936642447</guid><pubDate>Fri, 19 Jun 2015 14:38:27 -0400</pubDate><dc:creator>kevinthecity</dc:creator></item><item><title>Custom ViewGroups</title><description>&lt;a href="https://sriramramani.wordpress.com/2015/05/06/custom-viewgroups/"&gt;Custom ViewGroups&lt;/a&gt;: &lt;p&gt;A nice writeup on how to turn even simply laid-out Views into custom ViewGroups to improve performance.&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/119969475992</link><guid>https://effectiveandroid.tumblr.com/post/119969475992</guid><pubDate>Tue, 26 May 2015 18:07:02 -0400</pubDate><dc:creator>kevinthecity</dc:creator></item><item><title>Elevation on Android Lollipop not working</title><description>&lt;a href="http://stackoverflow.com/questions/26572048/elevation-on-android-lollipop-not-working"&gt;Elevation on Android Lollipop not working&lt;/a&gt;: &lt;p&gt;If you’re trying to use elevation, and it wont just work, make sure the background color of the view does not have an alpha channel.&lt;/p&gt;&lt;p&gt;e.g. use &lt;/p&gt;&lt;pre&gt;#444444&lt;/pre&gt; instead of &lt;pre&gt;#FF444444&lt;/pre&gt;&lt;br/&gt;</description><link>https://effectiveandroid.tumblr.com/post/119606192187</link><guid>https://effectiveandroid.tumblr.com/post/119606192187</guid><pubDate>Fri, 22 May 2015 11:24:38 -0400</pubDate><dc:creator>kevinthecity</dc:creator></item><item><title>Bookends and Remember</title><description>&lt;p&gt;&lt;a href="http://engineering.tumblr.com/post/118948866574/bookends-and-remember" class="tumblr_blog"&gt;engineering&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;We’ve open-sourced a couple of Android utilities that we use in the Tumblr app for Android. Check it out:&lt;/p&gt;&lt;h2&gt;&lt;a href="https://github.com/tumblr/Bookends"&gt;Bookends&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;A UI widget that allows for headers and footers on lists backed by &lt;a href="https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html"&gt;RecyclerView&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;As we were upgrading our app to migrate from ListView to RecyclerView, we found it kind of silly that RecyclerView doesn’t support headers by default. So we built a little wrapper that’ll do this for you.&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;&lt;a href="https://github.com/tumblr/Remember"&gt;Remember&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;An in-memory data store backed by shared preferences.&lt;/p&gt;&lt;p&gt;&lt;a href="http://developer.android.com/reference/android/content/SharedPreferences.html"&gt;SharedPreferences&lt;/a&gt; are useful but since they’re backed by disk, they can have unpredictable performance characteristics – you’re not guaranteed to always be in memory, and in the case of write operations, you &lt;b&gt;have&lt;/b&gt; to hit disk (possibly asynchronously) and remember what you wrote.&lt;/p&gt;&lt;p&gt;Remember takes care of that by putting a write-through cache in front of SharedPreferences. It also gives you a bunch of desirable consistency and concurrency characteristics – access can happen from any number of threads concurrently, and doing a write followed by a read will always return the value you just put. (Even if the value hasn’t been written to disk yet).&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Both of these projects are open-sourced under the Apache license, and are available at our &lt;a href="https://github.com/tumblr"&gt;Github page&lt;/a&gt;. Let us know what you think!&lt;br/&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Our very own &lt;a class="tumblelog" href="http://tmblr.co/mu6enkLbdiG3VlchUZNQoRQ"&gt;michael-lightwave&lt;/a&gt; open sourced some awesome libraries for Android, check them out!&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/118958597997</link><guid>https://effectiveandroid.tumblr.com/post/118958597997</guid><pubDate>Thu, 14 May 2015 13:48:54 -0400</pubDate><category>android</category><category>open source</category><category>android development</category><dc:creator>bdenney</dc:creator></item><item><title>Coercing Picasso To Play With Palette - Jake Wharton</title><description>&lt;a href="http://jakewharton.com/coercing-picasso-to-play-with-palette/"&gt;Coercing Picasso To Play With Palette - Jake Wharton&lt;/a&gt;: &lt;p&gt;Great article from Jake Wharton explaining not only how to use the Palette library with Picasso, but also how to be clever and resourceful when using third-party libraries.&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/118620719157</link><guid>https://effectiveandroid.tumblr.com/post/118620719157</guid><pubDate>Sun, 10 May 2015 13:13:32 -0400</pubDate><category>android</category><category>jake wharton</category><category>picasso</category><category>Android Development</category><dc:creator>bdenney</dc:creator></item><item><title>Improving Comment Rendering on Android</title><description>&lt;a href="http://instagram-engineering.tumblr.com/post/114508858967/improving-comment-rendering-on-android"&gt;Improving Comment Rendering on Android&lt;/a&gt;: &lt;p&gt;&lt;a href="http://instagram-engineering.tumblr.com/post/114508858967/improving-comment-rendering-on-android" class="tumblr_blog"&gt;instagram-engineering&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Last weekend, thousands of Instagrammers from all over the world got together for &lt;a href="https://instagram.com/explore/tags/wwim11/"&gt;Worldwide InstaMeet 11&lt;/a&gt;, one of Instagram’s community-organized, real-world meetups. &lt;a href="http://blog.instagram.com/post/114454091062/150323-wwim11"&gt;#WWIM11 was our largest and most geographically diverse InstaMeet ever&lt;/a&gt; - thousands of Instagrammers from &lt;a href="https://instagram.com/explore/tags/wwim11muscat/"&gt;Muscat&lt;/a&gt; to &lt;a href="https://instagram.com/explore/tags/bushwickmeet/"&gt;Bushwick&lt;/a&gt;…&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;A neat exploration on view caching by a pretty popular app ;)&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/117173025432</link><guid>https://effectiveandroid.tumblr.com/post/117173025432</guid><pubDate>Thu, 23 Apr 2015 11:11:22 -0400</pubDate><category>Android Development</category><category>programming</category><dc:creator>kevintcoughlin</dc:creator></item><item><title>Things You Should Never Do, Part I - Joel on Software</title><description>&lt;a href="http://www.joelonsoftware.com/articles/fog0000000069.html"&gt;Things You Should Never Do, Part I - Joel on Software&lt;/a&gt;: &lt;p&gt;Read this every time you’re thinking of re-writing from scratch.&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/117171890767</link><guid>https://effectiveandroid.tumblr.com/post/117171890767</guid><pubDate>Thu, 23 Apr 2015 10:51:34 -0400</pubDate><category>Android Development</category><category>programming</category><dc:creator>kevinthecity</dc:creator></item><item><title>One step at a time</title><description>&lt;a href="http://www.pushing-pixels.org/2015/04/22/one-step-at-a-time.html"&gt;One step at a time&lt;/a&gt;: &lt;p&gt;A great piece by Kirill Grouchnikov on how to approach your refactorings.&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/117171755552</link><guid>https://effectiveandroid.tumblr.com/post/117171755552</guid><pubDate>Thu, 23 Apr 2015 10:49:15 -0400</pubDate><category>thinklikeananimator</category><category>Android Development</category><dc:creator>kevinthecity</dc:creator></item><item><title>Android Performance Case Study Follow-up</title><description>&lt;a href="http://www.curious-creature.com/2015/03/25/android-performance-case-study-follow-up/"&gt;Android Performance Case Study Follow-up&lt;/a&gt;: &lt;blockquote class="link_og_blockquote"&gt;Two years ago, I published an articled titled Android Performance Case Study to help Android developers understand what tools and technique can be used to identify, track down, and fix performance …&lt;br/&gt;&lt;/blockquote&gt;&lt;p&gt;Great new article by Romain Guy giving some insight in how to debug complex and nuanced performance issues.&lt;/p&gt;&lt;p&gt;Spoilers after the break!&lt;/p&gt;&lt;!-- more --&gt;&lt;p&gt;ViewPagerIndicator 3rd party library usage of set Alpha was taking a real toll on performance!&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/114599912662</link><guid>https://effectiveandroid.tumblr.com/post/114599912662</guid><pubDate>Wed, 25 Mar 2015 15:09:31 -0400</pubDate><category>Performance</category><category>Android Development</category><dc:creator>kevinthecity</dc:creator></item><item><title>An awesome little library to help perform arc animations in.</title><description>&lt;img src="https://78.media.tumblr.com/6822217436cb18468537b87ee6e35e5b/tumblr_nkjrgroas91sj2s2to1_500.gif"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="https://78.media.tumblr.com/3ad3e35f5a46dc5fc236cd2a0340c563/tumblr_nkjrgroas91sj2s2to2_500.gif"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;An &lt;a href="https://github.com/asyl/ArcAnimator"&gt;awesome little library&lt;/a&gt; to help perform arc animations in.&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/112434247082</link><guid>https://effectiveandroid.tumblr.com/post/112434247082</guid><pubDate>Sun, 01 Mar 2015 14:00:27 -0500</pubDate><category>Android Development</category><category>animation</category><dc:creator>kevinthecity</dc:creator></item><item><title>Easy screenshots</title><description>&lt;p&gt;We take screenshots a lot at Tumblr, and it&amp;rsquo;s a bit tedious to find the &amp;lsquo;screenshot&amp;rsquo; button in Android Studio, save the screenshot, navigate to it, and open it in finder. Here&amp;rsquo;s an alias that does it all in one step:&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style="font-family:Courier;"&gt;alias ss=&amp;ldquo;adb shell screencap -p | perl -pe &amp;rsquo;s/\x0D\x0A/\x0A/g&amp;rsquo; &amp;gt; screen.png &amp;amp;&amp;amp; open screen.png&amp;rdquo;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Credit: &lt;a href="http://blog.shvetsov.com/2013/02/grab-android-screenshot-to-computer-via.html"&gt;http://blog.shvetsov.com/2013/02/grab-android-screenshot-to-computer-via.html&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/112168026242</link><guid>https://effectiveandroid.tumblr.com/post/112168026242</guid><pubDate>Thu, 26 Feb 2015 17:25:56 -0500</pubDate><category>android</category><category>android development</category><category>design</category><dc:creator>michael-lightwave</dc:creator></item><item><title>Setting up a new app in Crashlytics without the IDE plugin</title><description>&lt;a href="http://blog.danlew.net/2015/02/20/setting-up-a-new-app-in-crashlytics-without-the-plugin/"&gt;Setting up a new app in Crashlytics without the IDE plugin&lt;/a&gt;: &lt;blockquote class="link_og_blockquote"&gt;I like Crashlytics. I like the service they provide: their crash logs have saved my ass countless times. I also like that it’s free. However, there is one problem I’ve run into time and time again: getting new apps setup…&lt;/blockquote&gt;</description><link>https://effectiveandroid.tumblr.com/post/111565938957</link><guid>https://effectiveandroid.tumblr.com/post/111565938957</guid><pubDate>Fri, 20 Feb 2015 10:06:35 -0500</pubDate><category>android</category><category>crashlytics</category><dc:creator>kevinthecity</dc:creator></item><item><title>Unit testing support - Android Tools Project Site</title><description>&lt;a href="http://tools.android.com/tech-docs/unit-testing-support"&gt;Unit testing support - Android Tools Project Site&lt;/a&gt;: &lt;blockquote class="link_og_blockquote"&gt;Android tools project information site&lt;br/&gt;&lt;/blockquote&gt;&lt;p&gt;Integrated IDE support for unit testing in Android Studio 1.1, finally!&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/110445150957</link><guid>https://effectiveandroid.tumblr.com/post/110445150957</guid><pubDate>Sun, 08 Feb 2015 11:03:45 -0500</pubDate><category>Android Development</category><category>unit testing</category><dc:creator>kevinthecity</dc:creator></item><item><title>Designing Twitter Video</title><description>&lt;a href="http://paulstamatiou.com/twitter-video/"&gt;Designing Twitter Video&lt;/a&gt;: &lt;p&gt;A great look into the design process at Twitter&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/109895454117</link><guid>https://effectiveandroid.tumblr.com/post/109895454117</guid><pubDate>Mon, 02 Feb 2015 13:40:00 -0500</pubDate><category>twitter</category><category>android</category><category>design</category><dc:creator>kevinthecity</dc:creator></item><item><title>Instagram material design concept</title><description>&lt;img src="https://78.media.tumblr.com/34c7779f02c6840314e9ceb3a6fa80a3/tumblr_nj4nj3Qo681syz1nro1_400.gif"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Instagram material design concept&lt;/p&gt;</description><link>https://effectiveandroid.tumblr.com/post/109848477912</link><guid>https://effectiveandroid.tumblr.com/post/109848477912</guid><pubDate>Sun, 01 Feb 2015 23:50:34 -0500</pubDate><category>material design</category><category>android</category><dc:creator>kevinthecity</dc:creator></item></channel></rss>
