<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1211748602028746019</id><updated>2025-10-24T11:10:22.805+03:00</updated><title type='text'>.illusion&#39;s android</title><subtitle type='html'>Android sample codes, examples, tips and hints.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://illusionsandroid.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1211748602028746019/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://illusionsandroid.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>.illusion</name><uri>http://www.blogger.com/profile/05854460228821978583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-FDjwNQ7292A/TnM6qwKz9tI/AAAAAAAAAFs/H3hxP_vWph0/s220/407905.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1211748602028746019.post-3148372415871012072</id><published>2013-10-30T15:20:00.000+02:00</published><updated>2013-10-30T15:23:59.570+02:00</updated><title type='text'>Setting alpha (transparency), and flashing button animation example.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Setting transparency for a view in android 2.x version is not as easy as calling 1 method, but it still is pretty a trivial task:&lt;br /&gt;
&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;div style=&quot;background-color: #efefef;&quot;&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;final AlphaAnimation alphaAnimation = new AlphaAnimation(0.5F, 0.5F); // Creating new alpha animation, that makes the view half transparent&lt;/code&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;alphaAnimation.setDuration(0); // Make animation to perform instantly&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;alphaAnimation.setFillAfter(true); // Persist changes after the animation ends&lt;br /&gt;
yourLayout.startAnimation(alphaAnimation); // Call it for any view&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
As easy as that :)&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;div style=&quot;background-color: #efefef;&quot;&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;final Animation animation = new AlphaAnimation(1, 0); // Change alpha from fully visible to invisible&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;animation.setDuration(250); // duration 250 milliseconds&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;animation.setInterpolator(new LinearInterpolator()); // do not alter animation rate&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;animation.setRepeatCount(Animation.INFINITE); // Repeat animation infinitely&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;animation.setRepeatMode(Animation.REVERSE); // Reverse animation at the end so the button will fade back in&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;final Button btn = (Button) findViewById(R.id.your_btn); // Your button&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;btn.startAnimation(animation);&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;btn.setOnClickListener(new OnClickListener() {&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; @Override&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; public void onClick(final View view) {&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Some of your code on click&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;view.clearAnimation()&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;});&lt;/code&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
It&#39;s not limited for button only, you can se virtually for any view.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://illusionsandroid.blogspot.com/feeds/3148372415871012072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illusionsandroid.blogspot.com/2011/05/setting-alpha-transparency-and-flashing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1211748602028746019/posts/default/3148372415871012072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1211748602028746019/posts/default/3148372415871012072'/><link rel='alternate' type='text/html' href='http://illusionsandroid.blogspot.com/2011/05/setting-alpha-transparency-and-flashing.html' title='Setting alpha (transparency), and flashing button animation example.'/><author><name>.illusion</name><uri>http://www.blogger.com/profile/05854460228821978583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-FDjwNQ7292A/TnM6qwKz9tI/AAAAAAAAAFs/H3hxP_vWph0/s220/407905.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1211748602028746019.post-1654311335698235981</id><published>2011-11-18T12:53:00.000+02:00</published><updated>2011-11-18T12:53:42.669+02:00</updated><title type='text'>Raw screen coordinates (rawX &amp; rawY) to ListView item position</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Recently had to deal with this problem, which actually turned out pretty trivial to solve (thanks to&amp;nbsp;&lt;a href=&quot;http://stackoverflow.com/users/266233/riotopsys&quot; target=&quot;_blank&quot;&gt;riotopsys&lt;/a&gt;&amp;nbsp;from stackoverflow.com).&lt;br /&gt;
&lt;br /&gt;
Situation as an example: you have some sort of drag&amp;amp;drop functionality and you want to be able to drag some view onto an item in the ListView. My solution was to implement drag&amp;amp;drop through WindowsManager Layout, and position the view I&#39;m dragging using rawX, rawY coordinates. But how do I check what element is below (if I&#39;m hovering above a ListView)?&lt;br /&gt;
&lt;br /&gt;
Here the solution:&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&lt;br /&gt;
// Since ListView is vertical, I only use Y coordinate&lt;br /&gt;
public final int getItemPositionFromRawYCoordinates(final int rawY) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;// Ho many items are currently displayed on the screen&lt;br /&gt;
&amp;nbsp;&amp;nbsp;final int total = listView.getLastVisiblePosition() - getFirstVisiblePosition();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;// We will keep item coordinates here while iterating&lt;br /&gt;
&amp;nbsp;&amp;nbsp;final int[] coords = new int[2];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;for (int i=0; i&amp;lt;total; i++) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Since ListView recycles rows, the amount of children != amount of items in the list. There will as many children as visible items currently on the screen. That&#39;s why we counted total&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;final View child = listView.getChildAt(i);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Get current child position on screen (these are global coordinates)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;child.getLocationOnScreen(coords);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// We need just the top coordinate&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;final int top = coords[1];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // And bottom&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;final int bottom = top + child.getHeight();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // If our touch Y coordinate is in between, that means we are currently pointing on that child;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((rawY  &amp;gt;= top) &amp;amp;&amp;amp;  (rawY &amp;lt;= bottom)) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return getFirstVisiblePosition()+i;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;return -1;&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
That way you get either -1 if no items are currently below your pointer (which is should be weird), or actual item position :)&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illusionsandroid.blogspot.com/feeds/1654311335698235981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illusionsandroid.blogspot.com/2011/11/raw-screen-coordinates-rawx-rawy-to.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1211748602028746019/posts/default/1654311335698235981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1211748602028746019/posts/default/1654311335698235981'/><link rel='alternate' type='text/html' href='http://illusionsandroid.blogspot.com/2011/11/raw-screen-coordinates-rawx-rawy-to.html' title='Raw screen coordinates (rawX &amp; rawY) to ListView item position'/><author><name>.illusion</name><uri>http://www.blogger.com/profile/05854460228821978583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-FDjwNQ7292A/TnM6qwKz9tI/AAAAAAAAAFs/H3hxP_vWph0/s220/407905.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1211748602028746019.post-3236977627830777878</id><published>2011-09-16T16:14:00.000+03:00</published><updated>2011-09-16T16:14:51.179+03:00</updated><title type='text'>Android soft (virtual) keyboard listener</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div&gt;If you use Evernote android app you might have noticed, that when, on a login screen, soft keyboard gets shown (to type password or username) the layout doesn&#39;t just scale, or scrolls. It changes (for example Evernotes logo is hidden).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Unfortunately, android api doesn&#39;t provide you with the specific tools to listen for a moment, when soft keyboard gets shown, or hidden. But there is a way (dirty hack) to assume that the keyboards state was changed.&lt;/div&gt;&lt;div&gt;We can guess it by listening measure changes in layout.&lt;/div&gt;&lt;div&gt;To do it, first, we need to make our layout to resize and scale instaed of scroll. &amp;nbsp;Add&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #eeeeee; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; font-size: 14px; line-height: 18px; white-space: pre;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;android&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;windowSoftInputMode&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;str&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&quot;adjustResize&quot;&lt;/span&gt;&lt;/span&gt; parameter to your activity in manifest.xml. This way, when soft keyboard is called, content will be resized instead of scrolled.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Next step is to actually listen for this resizing. And again, there is a catch. There is no such thing as OnMeasureChangedListener, so the only way is to extend the container layout and do it inside. As an example I extended LinearLayout, and this is what I&#39;ve got:&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;background-color: #efefef;&quot;&gt;&lt;code class=&quot;prettyprint lang-java&quot;&gt;public class MyLayout extends LinearLayout {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;public MyLayout(final Context context, final AttributeSet attrs) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;super(context, attrs);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;public MyLayout(Context context) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;super(context);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;private OnSoftKeyboardListener onSoftKeyboardListener;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;@Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (onSoftKeyboardListener != null) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;final int newSpec = MeasureSpec.getSize(heightMeasureSpec); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;final int oldSpec = getMeasuredHeight();&lt;br /&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// If layout became smaller, that means something forced it to resize. Probably soft keyboard :)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (oldSpec &amp;gt; newSpec){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;onSoftKeyboardListener.onShown();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;onSoftKeyboardListener.onHidden();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;super.onMeasure(widthMeasureSpec, heightMeasureSpec);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;public final void setOnSoftKeyboardListener(final OnSoftKeyboardListener listener) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.onSoftKeyboardListener = listener;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;// Simplest possible listener :)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;public interface OnSoftKeyboardListener {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void onShown();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void onHidden();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;That&#39;s about it. Of course you need to use your layout (MyLayout) in your code/xml for it to work. And example from activity:&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background-color: #efefef;&quot;&gt;&lt;code class=&quot;prettyprint lang-java&quot;&gt;((MyLayout)findViewById(R.id.layout)).setOnSoftKeyboardListener(new OnSoftKeyboardListener() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;@Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;public void onShown() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Do something here&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;@Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;public void onHidden() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Do something here&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
});&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;P.S. It works pretty well as it is. But you should check it for different situations. For example screen rotations, or other possible changes in the layout, that might trigger resize of any sort. &amp;nbsp;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illusionsandroid.blogspot.com/feeds/3236977627830777878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illusionsandroid.blogspot.com/2011/09/android-soft-virtual-keyboard-listener.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1211748602028746019/posts/default/3236977627830777878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1211748602028746019/posts/default/3236977627830777878'/><link rel='alternate' type='text/html' href='http://illusionsandroid.blogspot.com/2011/09/android-soft-virtual-keyboard-listener.html' title='Android soft (virtual) keyboard listener'/><author><name>.illusion</name><uri>http://www.blogger.com/profile/05854460228821978583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-FDjwNQ7292A/TnM6qwKz9tI/AAAAAAAAAFs/H3hxP_vWph0/s220/407905.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1211748602028746019.post-114041849472876465</id><published>2011-05-12T15:34:00.000+03:00</published><updated>2011-05-13T23:26:11.335+03:00</updated><title type='text'>Modifying (coloring, scaling) part of the text in the TextView</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Thre are several ways to modify different parts of text in a single TextView. One of them is Html.fromHtm() that would format your text according to html tags you put in it beforehand. I find that approach too crude. You have to modify the original text manually to put opening and closing tags in, which can become really ugly if you need to do a lot of formatting.&lt;br /&gt;
&lt;br /&gt;
The second way, is to use Spans and SpannableStringBuilder.&lt;br /&gt;
Spans give you ability to define modification, for example: new ForegroundColorSpan(Color.rgb(100, 100, 100)) can be used to change the color of the text. Similarly, new RelativeSizeSpan(0.8F) can be used to scale text.&lt;br /&gt;
&lt;br /&gt;
SpannableStringBuilder allows us to apply those spans on particular areas of our text. Usage is very easy as demonstrated below:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background-color: #efefef;&quot;&gt;&lt;code class=&quot;prettyprint lang-java&quot;&gt;private final static StyleSpan bss = new StyleSpan(android.graphics.Typeface.BOLD);&lt;br /&gt;
private final static ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(100, 100, 100));&lt;br /&gt;
private final static RelativeSizeSpan rszSmall = new RelativeSizeSpan(0.8F);&lt;br /&gt;
private final static RelativeSizeSpan rszBig = new RelativeSizeSpan(1.2F);&lt;br /&gt;
&lt;br /&gt;
private void insertFormattedText(final TextView view, final String text) {&lt;br /&gt;
&amp;nbsp; final SpannableStringBuilder sb = new SpannableStringBuilder(text);&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; // Make characters from 0 to 2 bold &amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; sb.setSpan(bss, 0, 2, Spannable.SPAN_INCLUSIVE_INCLUSIVE);&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; // Change the color of characters from 2 to 4&lt;br /&gt;
&amp;nbsp; sb.setSpan(fcs, 2, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; // Scale down characters from 4 to 6&lt;br /&gt;
&amp;nbsp; sb.setSpan(rszSmall, 4, 6, Spannable.SPAN_INCLUSIVE_INCLUSIVE);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; // Make characters from 6 to 8 bold&lt;br /&gt;
&amp;nbsp; sb.setSpan(bss, 6, 8, Spannable.SPAN_INCLUSIVE_INCLUSIVE);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; // Scale up characters from 8 to 12&lt;br /&gt;
&amp;nbsp; sb.setSpan(rszBig, 8, 12, Spannable.SPAN_INCLUSIVE_INCLUSIVE);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; // Set the text into the TextView&lt;br /&gt;
&amp;nbsp; view.setText(sb);&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
Spannable.SPAN_INCLUSIVE_INCLUSIVE points that both (ending and starting) characters must be included in formatting.&lt;br /&gt;
&lt;br /&gt;
Just look into &lt;strong&gt;android.text.style.*&lt;/strong&gt; package for a list of available spans ;)&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illusionsandroid.blogspot.com/feeds/114041849472876465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illusionsandroid.blogspot.com/2011/05/modifying-coloring-scaling-part-of-text.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1211748602028746019/posts/default/114041849472876465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1211748602028746019/posts/default/114041849472876465'/><link rel='alternate' type='text/html' href='http://illusionsandroid.blogspot.com/2011/05/modifying-coloring-scaling-part-of-text.html' title='Modifying (coloring, scaling) part of the text in the TextView'/><author><name>.illusion</name><uri>http://www.blogger.com/profile/05854460228821978583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-FDjwNQ7292A/TnM6qwKz9tI/AAAAAAAAAFs/H3hxP_vWph0/s220/407905.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1211748602028746019.post-5162967242146479850</id><published>2011-05-11T15:41:00.002+03:00</published><updated>2011-05-13T20:55:05.446+03:00</updated><title type='text'>Adding a fling gesture listener to a view</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Here&#39;s an example of a simple fling gesture listener, that you can add to almost any view, like ImageView to browse photos and images by flicking, or even to layout to change user interface on fling.&lt;br /&gt;
&lt;br /&gt;
First, lets&#39; start with the most simplest version:&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&lt;br /&gt;
public class MyActivity extends Activity {&lt;br /&gt;
&amp;nbsp; private void onCreate() {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;// Set your layout&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;final ImageView imageView  = (ImageView) findViewById(R.id.image_view);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;imageView.setOnTouchListener(new OnTouchListener() {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public boolean onTouch(final View view, final MotionEvent event) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return gdt.onTouchEvent(event);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;});&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; private final GestureDetector gdt = new GestureDetector(new GestureListener());&lt;br /&gt;
&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; private class GestureListener extends SimpleOnGestureListener {&lt;/code&gt;&lt;code class=&quot;prettyprint lang-java&quot;&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final int SWIPE_MIN_DISTANCE = 120;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final int SWIPE_THRESHOLD_VELOCITY = 200;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&amp;nbsp;&lt;/code&gt;&lt;code class=&quot;prettyprint lang-java&quot;&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;@Override&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(e1.getX() - e2.getX() &amp;gt; SWIPE_MIN_DISTANCE &amp;amp;&amp;amp; Math.abs(velocityX) &amp;gt; SWIPE_THRESHOLD_VELOCITY) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Right to left, your code here&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }  else if (e2.getX() - e1.getX() &amp;gt; SWIPE_MIN_DISTANCE &amp;amp;&amp;amp; Math.abs(velocityX) &amp;gt; &amp;nbsp;SWIPE_THRESHOLD_VELOCITY) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Left to right, your code here&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(e1.getY() - e2.getY() &amp;gt; SWIPE_MIN_DISTANCE &amp;amp;&amp;amp; Math.abs(velocityY) &amp;gt; SWIPE_THRESHOLD_VELOCITY) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Bottom to top, your code here&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }  else if (e2.getY() - e1.getY() &amp;gt; SWIPE_MIN_DISTANCE &amp;amp;&amp;amp; Math.abs(velocityY) &amp;gt; SWIPE_THRESHOLD_VELOCITY) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Top to bottom, your code here&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So here&#39;s the example of an activity, that somewhere on it&#39;s layout has an ImageView, that we want user to be able to fling.&lt;br /&gt;
What we basically do, is recording when and where user has touched the view, and where and when released, so we can calculate how fast and at what distance has user flinged. That&#39;s what SWIPE_THRESHOLD_VELOCITY and SWIPE_MIN_DISTANCE fields are for. You can set your own values, of course. The ones I gave are the optimal IMO.&lt;br /&gt;
&lt;br /&gt;
This example is good, but what if we want to be able to detect flings on other views in other activities? Copying the code for every activity would be annoying and too difficult to support. Not even speaking about the ugly way we need to run some code on a specific fling. Here&#39;s a version of a &quot;really easy to use&quot; listener, that can be used anywhere without much trouble:&lt;br /&gt;
&lt;br /&gt;
OnFlingGestureListener.java&lt;br /&gt;
&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&lt;br /&gt;
public abstract class OnFlingGestureListener implements OnTouchListener {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; private final GestureDetector gdt = new GestureDetector(new GestureListener());&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp; public boolean onTouch(final View v, final MotionEvent event) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;return gdt.onTouchEvent(event);&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; private final class GestureListener extends SimpleOnGestureListener {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;private static final int SWIPE_MIN_DISTANCE = 60;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;private static final int SWIPE_THRESHOLD_VELOCITY = 100;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;@Override&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(e1.getX() - e2.getX() &amp;gt; SWIPE_MIN_DISTANCE &amp;amp;&amp;amp; Math.abs(velocityX) &amp;gt; SWIPE_THRESHOLD_VELOCITY) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;onRightToLeft();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }  else if (e2.getX() - e1.getX() &amp;gt; SWIPE_MIN_DISTANCE &amp;amp;&amp;amp; Math.abs(velocityX) &amp;gt; SWIPE_THRESHOLD_VELOCITY) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;onLeftToRight();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(e1.getY() - e2.getY() &amp;gt; SWIPE_MIN_DISTANCE &amp;amp;&amp;amp; Math.abs(velocityY) &amp;gt; SWIPE_THRESHOLD_VELOCITY) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;onBottomToTop();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }  else if (e2.getY() - e1.getY() &amp;gt; SWIPE_MIN_DISTANCE &amp;amp;&amp;amp; Math.abs(velocityY) &amp;gt; SWIPE_THRESHOLD_VELOCITY) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;onTopToBottom();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return false;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; public abstract void onRightToLeft();&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; public abstract void onLeftToRight();&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; public abstract void onBottomToTop();&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; public abstract void onTopToBottom();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
And previous example with the new listener:&lt;br /&gt;
&lt;br /&gt;
&lt;code class=&quot;prettyprint lang-java&quot;&gt;&lt;br /&gt;
public class MyActivity extends Activity {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; private void onCreate() {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;// Set your layout&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;final ImageView imageView  = (ImageView) findViewById(R.id.image_view);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;imageView.setOnTouchListener(new OnFlingGestureListener() {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void onTopToBottom() {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//Your code here&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void onRightToLeft() {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//Your code here&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void onLeftToRight() {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//Your code here&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void onBottomToTop() {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//Your code here&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;});&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
As easy as that.&lt;br /&gt;
&lt;br /&gt;
P.S. Criticism and comments are welcomed.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illusionsandroid.blogspot.com/feeds/5162967242146479850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illusionsandroid.blogspot.com/2011/05/adding-fling-gesture-listener-to-view.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1211748602028746019/posts/default/5162967242146479850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1211748602028746019/posts/default/5162967242146479850'/><link rel='alternate' type='text/html' href='http://illusionsandroid.blogspot.com/2011/05/adding-fling-gesture-listener-to-view.html' title='Adding a fling gesture listener to a view'/><author><name>.illusion</name><uri>http://www.blogger.com/profile/05854460228821978583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-FDjwNQ7292A/TnM6qwKz9tI/AAAAAAAAAFs/H3hxP_vWph0/s220/407905.jpeg'/></author><thr:total>11</thr:total></entry></feed>