VK Stream
We’ve created the new Android and iPhone applications for Russian vk.com social network.
If you understand Russian language – you can try:)
https://play.google.com/store/apps/details?id=com.amberfog.reader
enjoy!
//DL
We’ve created the new Android and iPhone applications for Russian vk.com social network.
If you understand Russian language – you can try:)
https://play.google.com/store/apps/details?id=com.amberfog.reader
enjoy!
//DL
If you keep sensitive data in your Android application SQLite database – you probably want to keep in save and encrypted. Here is SQLCipher for Android to help you with it.
SQLCipher is an open source library that provides transparent, secure 256-bit AES encryption of SQLite database files.
One small problem – your APK size will increase for another… 3Mb:)
//DL
Nice collections of Android UI components and libraries!
http://www.theultimateandroidlibrary.com/
http://www.androidviews.net/
//DL
Android: Quick Dive
Android: Make Your App Social
Omsk G+ event
Moscow G+ event
Voronezh G+ event
enjoy
//DL
All you want to know about concurrency in Android in Blake Meike presentation from OSCON 2012
https://github.com/bmeike/OSCON/blob/master/Concurrency.odp
UDP: one more good presentation http://www.slideshare.net/andersgoransson/efficient-android-threading
//DL
In case you missed cool feature of ADT v.17
“Added a feature that allows you to run some code only in debug mode. Builds now generate a class called BuildConfig containing a DEBUG constant that is automatically set according to your build type. You can check the (BuildConfig.DEBUG) constant in your code to run debug-only functions such as outputting debug logs.”
Can help a lot:) Everybody forgets to disable debug in release at least one time in life.
//DL
Not sure this is most convenient way to navigate on Android. But more and more applications are using “side navigation” pattern for their UI.
Nice article about this: http://www.androiduipatterns.com/2012/06/emerging-ui-pattern-side-navigation.html
have fun!
Update: some interesting articles about implementation
http://android.cyrilmottier.com/?p=658
http://android.cyrilmottier.com/?p=701
http://android.cyrilmottier.com/?p=717
//DL
We’ve created fun Android application that makes prediction for EURO 2012 games:)
You can make your guess about match result and compare it to Ukrainian Boar Foreteller. Share your prediction with friends (Twitter, Facebook, vk.com).
Check it out! Have fun!
https://play.google.com/store/apps/details?id=com.amberfog.boar
//DL
There are a lot of questions on the Internet like these:
http://stackoverflow.com/questions/4817900/android-fragments-and-animation
http://stackoverflow.com/questions/5327636/animating-fragments-and-the-back-stack
If you are looking for a sample code – this post is for you.
Everybody wants to implement slide-in/slide-out animations like in GMail Tablet client. They try to use fragment animations (setCustomAnimations for FragmentTransaction). But if you take a deep look into GMail client implementation – they use LinearLayout and ObjectAnimator.
The code is quite simple – you just change left margin of the root view + change width of the right view.
package com.fragment.test;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.animation.TimeInterpolator;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
public class FragmentAnimationTestActivity extends Activity implements Fragment2.FragmentResultListener {
private static final TimeInterpolator sCollapseInterpolator = new DecelerateInterpolator(2.5F);
private View mPanel1;
private View mPanel2;
private View mLayout;
boolean isCollapsed;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLayout = findViewById(R.id.l1);
mPanel1 = findViewById(R.id.fragment1);
mPanel2 = findViewById(R.id.fragment2);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment1, Fragment1.newInstance(), "f1");
ft.replace(R.id.fragment2, Fragment2.newInstance(this), "f2");
ft.commit();
}
public int getPanelLeft() {
return ((ViewGroup.MarginLayoutParams) mLayout.getLayoutParams()).leftMargin;
}
public void setPanelLeft(int paramInt) {
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) mLayout.getLayoutParams();
lp.leftMargin = paramInt;
mLayout.setLayoutParams(lp);
}
public int getPanel2W() {
return ((ViewGroup.MarginLayoutParams) mPanel2.getLayoutParams()).width;
}
public void setPanel2W(int paramInt) {
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) mPanel2.getLayoutParams();
lp.width = paramInt;
mPanel2.setLayoutParams(lp);
}
@Override
public void onBtnClick() {
if (isCollapsed) {
PropertyValuesHolder[] arrayOfPropertyValuesHolder = new PropertyValuesHolder[2];
arrayOfPropertyValuesHolder[0] = PropertyValuesHolder.ofInt("PanelLeft", -300, 0);
arrayOfPropertyValuesHolder[1] = PropertyValuesHolder.ofInt("Panel2W", 1280, 980);
ObjectAnimator localObjectAnimator = ObjectAnimator.ofPropertyValuesHolder(this,
arrayOfPropertyValuesHolder).setDuration(400);
localObjectAnimator.setInterpolator(sCollapseInterpolator);
localObjectAnimator.start();
} else {
PropertyValuesHolder[] arrayOfPropertyValuesHolder = new PropertyValuesHolder[2];
arrayOfPropertyValuesHolder[0] = PropertyValuesHolder.ofInt("PanelLeft", 0, -300);
arrayOfPropertyValuesHolder[1] = PropertyValuesHolder.ofInt("Panel2W", 980, 1280);
ObjectAnimator localObjectAnimator = ObjectAnimator.ofPropertyValuesHolder(this,
arrayOfPropertyValuesHolder).setDuration(400);
localObjectAnimator.setInterpolator(sCollapseInterpolator);
localObjectAnimator.start();
}
isCollapsed = !isCollapsed;
}
}
Of course, you can calculate all values dynamically. This is just a quick ugly sample. Full source code is available here.
Happy tabletting!
//DL