skip to main | skip to sidebar

Android Development Tutorial

Pages

  • Home
 
  • RSS
  • Twitter
Related Posts Plugin for WordPress, Blogger...
Sunday, October 7, 2012

3D Rotation in Android

Posted by Raju Gupta at 1:19 PM – 0 comments
 

Android provides Animation API. By using we can create custom animations . Android sample provides Animation classes for some standard types like 3D rotation, Push up , shake etc.

Step 1 : include Rotate3dAnimation.java file in your package.
Step 2 : create a reportview.xml as layout file.
Step 3 : below is code to provide 360 degree rotation and display a html file from assets folder.


XML file Layout code  

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/container" android:layout_width="match_parent"
 android:layout_height="match_parent">

 <WebView android:layout_height="fill_parent"
  android:layout_width="fill_parent" android:id="@+id/webAnim1"></WebView>
 <WebView android:id="@+id/webAnim" android:layout_height="fill_parent"
  android:layout_width="fill_parent"></WebView>

</FrameLayout>

public class HTMLReportDisplay extends Activity {

 private ViewGroup mContainer;
 private WebView mWebView;
 private WebView mWebView1;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.reportview);

  mContainer = (ViewGroup) findViewById(R.id.container);
  mWebView = (WebView) findViewById(R.id.webAnim);
  mWebView1 = (WebView) findViewById(R.id.webAnim1);

  String report = "name of html file from asset folder";
  mWebView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
  mWebView.getSettings().setBuiltInZoomControls(true);
  mWebView.loadUrl("file:///android_asset/" + report + ".html");
  

  mWebView1.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
  mWebView1.getSettings().setBuiltInZoomControls(true);
  mWebView1.loadUrl("file:///android_asset/" + report + ".html");
  /** Since we are caching large views, we want to keep their cache
    between each animation*/
  mContainer
    .setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);

  applyRotation(1, 90, 0);
 }

 /**
  * Setup a new 3D rotation on the container view.
  * 
  * @param position
  *            the item that was clicked to show a picture, or -1 to show the
  *            list
  * @param start
  *            the start angle at which the rotation must begin
  * @param end
  *            the end angle of the rotation
  */
 private void applyRotation(int position, float start, float end) {
  // Find the center of the container
  final float centerX = mContainer.getWidth() / 2.0f;
  final float centerY = mContainer.getHeight() / 2.0f;
  /** Create a new 3D rotation with the supplied parameter
   The animation listener is used to trigger the next animation*/
  final Rotate3dAnimation rotation = new Rotate3dAnimation(start, end,
    centerX, centerY, 310.0f, true);
  rotation.setDuration(400);
  rotation.setFillAfter(true);
  rotation.setInterpolator(new AccelerateInterpolator());
  rotation.setAnimationListener(new DisplayNextView(position));

  mContainer.startAnimation(rotation);
 }

 /**
  * this function is called when any key is pressed.
  */
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  switch (keyCode) {
  /** Check if back button key is pressed */
  case KeyEvent.KEYCODE_BACK:
   applyRotation(-1, 180, 0);
   new Handler().postDelayed(new Runnable() {

    public void run() {
     finishActivity();

    }
   }, 300);

   break;
  }
  return super.onKeyDown(keyCode, event);
 }

 private void finishActivity() {
  finish();
 }

 /**
  * This class listens for the end of the first half of the animation. It
  * then posts a new action that effectively swaps the views when the
  * container is rotated 90 degrees and thus invisible.
  */
 private final class DisplayNextView implements Animation.AnimationListener {
  private final int mPosition;

  public DisplayNextView(int position) {
   mPosition = position;
  }

  public void onAnimationStart(Animation animation) {
  }

  public void onAnimationEnd(Animation animation) {
   mContainer.post(new SwapViews(mPosition));
  }

  public void onAnimationRepeat(Animation animation) {
  }
 }

 /**
  * This class is responsible for swapping the views and start the second
  * half of the animation.
  */
 private final class SwapViews implements Runnable {
  private final int mPosition;

  public SwapViews(int position) {
   mPosition = position;
  }

  public void run() {
   final float centerX = mContainer.getWidth() / 2.0f;
   final float centerY = mContainer.getHeight() / 2.0f;
   Rotate3dAnimation rotation;

   if (mPosition > -1) {
    mWebView.setVisibility(View.GONE);
    mWebView1.setVisibility(View.VISIBLE);
    mWebView1.requestFocus();

    rotation = new Rotate3dAnimation(180, 0, centerX, centerY,
      310.0f, false);
   } else {
    mWebView1.setVisibility(View.GONE);
    mWebView.setVisibility(View.VISIBLE);
    mWebView.requestFocus();

    rotation = new Rotate3dAnimation(90, 0, centerX, centerY,
      310.0f, false);
   }

   rotation.setDuration(500);
   rotation.setFillAfter(true);
   rotation.setInterpolator(new DecelerateInterpolator());

   mContainer.startAnimation(rotation);
  }
 }
}

Email This BlogThis! Share to X Share to Facebook

Leave a Reply

Newer Post Older Post
Subscribe to: Post Comments (Atom)

More Technical Blogs

  • Tech Savvy - Technology Tips
  • PHP Video Tutorial
  • Java Programs with Output
  • C Programming Tutorial
  • Linux Tutorial
  • Language Tutorial
  • Web Development tutorial
  • Popular
  • Recent
  • Archives

Popular Posts

  • How to Program for Android: Video Tutorial 7 - Change you application Icon
    How to Change your application icon. Low density -- ldpi -- 36×36 px Medium density -- mdpi -- 48×48 px (correct size if only one drawa...
  • Android Dynamically generating views
    This code snippet will generate the textview and button at run time. //The layout LinearLayout01 should be predefined.In this layout you...
  • Reordering of listview
    Listview rows order can be changed using drag and drop functionality.Dragging should be enabled beyond the visible listview position. ...
Powered by Blogger.

Archives

  • ▼  2012 (44)
    • ▼  October (31)
      • Reordering of listview
      • Text-to-Speech capability for Android Devices
      • Android Stub uninstalling the existing client and ...
      • Tab creation in android screen
      • ListView Recordering by drag drop in Android
      • Android app for SimpleWiktionary
      • App in android for random quote generation
      • Implementing ListView-Adapter in Android
      • Extract all java classes from APK
      • Get XML from APK
      • Sending SMS from the Android Application
      • How to create Drop Down in Android
      • Android Page Navigation
      • To retrieve the cell info for Android device
      • Creating the enrty in the agenda for Android devices.
      • Test Application for Samsung Android devices
      • Color Picker from Image in Android
      • Image Switcher & Gallery in Android
      • Andorid application that listens to incoming sms
      • Accelerometer management for the Android devices
      • Alert box for Confirm
      • 3D Rotation in Android
      • Custom Bar Control for Android using Java
      • Creating Layouts TableRows and TextViews dynamical...
      • Android SeekBar
      • Dialing phone number from Google Android Application
      • Login Screen Creation using Android
      • Add a Progress Bar to Android based Mobile Screens
      • Adding a button to Android based mobile screens
      • Android Dynamically generating views
      • Timezone converter
    • ►  September (3)
    • ►  March (1)
    • ►  February (9)
  • ►  2011 (69)
    • ►  December (69)
 

Followers

Labels

  • Activities (9)
  • Andoird Menu (2)
  • Android timelineActivity. (1)
  • Android Adapter (1)
  • Android app (9)
  • Android App Inventor (1)
  • Android App Publishing (2)
  • Android Application Components (3)
  • Android Application Fundamental (2)
  • Android Architecture (1)
  • Android AsyncTask (1)
  • Android Basic (7)
  • Android Bootcamp Training (18)
  • Android Button Widget (3)
  • Android Custom Style (1)
  • Android Dialog (1)
  • Android Drawable (2)
  • Android Environment (1)
  • Android example (9)
  • Android File System (2)
  • Android Geolocation (2)
  • Android ImageView (1)
  • Android Installation (8)
  • Android intents (5)
  • Android lifecycle (1)
  • Android LIst (4)
  • Android Listener (4)
  • Android Manifest (3)
  • Android Market (1)
  • Android Notification (1)
  • Android Object (1)
  • Android Package File (1)
  • Android Platform (1)
  • Android service (4)
  • Android StatusActivity (1)
  • Android Theme Style (3)
  • Android Traceview (1)
  • Android UI (6)
  • Android Unit Testing (1)
  • Android Widget (4)
  • AndroidManifest.xml (4)
  • Application Icon (1)
  • Broadcast Receiver (2)
  • Content Providers (1)
  • Creating Activities (1)
  • Creating Custom Styles in Android (1)
  • Creating Multiple Activities (1)
  • Database (3)
  • draw9patch (1)
  • Eclipse (12)
  • Explicit Intents (2)
  • Explicit Intents Example (1)
  • Hello world with Android (1)
  • Helloworld with Android (5)
  • Implicit Intents (2)
  • Implicit Intents Example (1)
  • Layout View (3)
  • lifemichael (8)
  • Location Sensor (1)
  • Multiple Activities (2)
  • Netbeans (1)
  • OpenGL ES Graphics (1)
  • Passing Values with Intents (2)
  • Project Structure (1)
  • Retrieving Image URI from Intents (1)
  • Setting Android Environment (1)
  • SQLite (3)
  • TGENT (8)
  • UserGroupAtGoogle (8)
  • XML (1)
  • xtensive arts Training (11)
 
 
© 2011 Android Development Tutorial | Designs by Web2feel & Fab Themes

Bloggerized by DheTemplate.com - Main Blogger