how to make android sweeping second hand on analog clock?

android

Solution

       protected static final String TAG = SecondHand.class.getName();
       private ImageView img;
       Handler mHandler;

       protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       Thread myThread = null;

        Runnable runnable = new CountDownRunner();
        myThread = new Thread(runnable);
        myThread.start();

 }

public void doRotate() {

 runOnUiThread(new Runnable() {
 public void run() {
 try {

 Date dt = new Date();
 int hours = dt.getHours();
 int minutes = dt.getMinutes();
 int seconds = dt.getSeconds();
 String curTime = hours + ":" + minutes + "::" + seconds;
 Log.v("log_tag", "Log is here Time is now" + curTime);
 img = (ImageView) findViewById(R.id.imgsecond);
 RotateAnimation rotateAnimation = new RotateAnimation(
   (seconds - 1) * 6, seconds * 6,
   Animation.RELATIVE_TO_SELF, 0.5f,
   Animation.RELATIVE_TO_SELF, 0.5f);

 rotateAnimation.setInterpolator(new LinearInterpolator());
 rotateAnimation.setDuration(1000);
 rotateAnimation.setFillAfter(true);

 img.startAnimation(rotateAnimation);
} catch (Exception e) {

  }
 }
});
}

class CountDownRunner implements Runnable {
// @Override
public void run() {
 while (!Thread.currentThread().isInterrupted()) {
 try {

  doRotate();
  Thread.sleep(1000);
 } catch (InterruptedException e) {
  Thread.currentThread().interrupt();
 } catch (Exception e) {
  Log.e("log_tag", "Error is " + e.toString());
  }
 }
}
}

xml file:

      <?xml version="1.0" encoding="utf-8"?>
      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
           android:layout_width="wrap_content" android:layout_height="wrap_content"
           android:gravity="center" android:layout_gravity="center">

        <AnalogClock android:layout_width="wrap_content"
                     android:hand_minute="@drawable/widgetminute"                                   
                     android:id="@+id/AnalogClock" 
                      android:dial="@drawable/widgetdial"
                     android:hand_hour="@drawable/widgethour"  
                     android:layout_height="wrap_content"              
                    android:layout_centerInParent="true">
       </AnalogClock>
    <ImageView android:src="@drawable/widgetseocond1" android:id="@+id/imgsecond"
    android:layout_width="wrap_content" 
     android:layout_height="wrap_content"
   android:layout_centerInParent="true" />
  </RelativeLayout>

Problem

I'm a newbie in android programing. Is there a way to make this analog clock with second hand do a sweeping (chronograph) movement instead of quartz? Any sample to download? I'm using this code for the clock: ``` public class SecondHand extends Activity { // private Handler mHandler = new Handler(); protected static final String TAG = SecondHand.class.getName(); private ImageView img; Handler mHandler; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Thread myThread = null; Runnable runnable = new CountDownRunner(); myThread = new Thread(runnable); myThread.start(); } private void doPlay(){ new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub Log.v("log_tag", "this is seocond thread"); } }).start(); } public void doRotate() { runOnUiThread(new Runnable() { public void run() { try { Date dt = new Date(); int hours = dt.getHours(); int minutes = dt.getMinutes(); int seconds = dt.getSeconds(); img = (ImageView) findViewById(R.id.imgsecond); RotateAnimation rotateAnimation = new RotateAnimation((seconds - 1) * 6, seconds * 6, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f); rotateAnimation.setInterpolator(new LinearInterpolator()); rotateAnimation.setFillAfter(true); img.startAnimation(rotateAnimation); } catch (Exception e) { Log.e("log_tag", "Error msg is " + e.toString()); } } }); } class CountDownRunner implements Runnable { // @Override public void run() { while (!Thread.currentThread().isInterrupted()) { try { // Log.v("log_tag", "Roate is going"); doRotate(); Thread.sleep(1000); doPlay(); } catch (InterruptedException e) { // Thread.currentThread().interrupt(); } catch (Exception e) { Log.e("log_tag", "Error is " + e.toString()); } } } } @Override protected void onDestroy() { android.os.Process.killProcess(android.os.Process.myPid()); } ```

Original source