दिलचस्प पोस्ट
फेसबुक ने ओजी छवि को पहले शेयर पर नजरअंदाज किया ओपनएमपी के साथ चोलस्की अपघटन AJAX के माध्यम से एमवीसी एक्शन के लिए एआरआर पास करें डुप्लिकेट कुंजी पर MySQL – अंतिम प्रविष्टि आईडी? रनटाइम पर एंड्रॉइड व्यू के आकार का निर्धारण करना Android पर एक्शन बार में उपयोग करने के लिए, SearchView पर डिफ़ॉल्ट आइकन कैसे बदल सकता है? एसटीएल में चौड़ी चार रूपांतरण से यूटीएफ 8 मैं कैसे कच्चे एसक्यूएल प्रश्नों को देख सकता हूं Django चल रहा है? मैं कैसे पायथन में शब्दकोश के मूल्यों से शब्दकोशों की एक सूची को सॉर्ट कर सकता हूं? एसक्यूएल सर्वर बनाम बनाम प्रदर्शन तत्वों के सेट में एक विशेषता का न्यूनतम मूल्य खोजने के लिए मैं कैसे XPath का उपयोग कर सकता हूं? नोहाप के तहत मैं एक पहले से चलने वाली प्रक्रिया कैसे डालूं? अभिव्यक्ति ___ की जांच के बाद यह बदल गया है देखें का चयन FROM खंड में एक subquery शामिल है PDO का उपयोग कर सहायक फ़ंक्शन डालें / अपडेट करें

एंड्रॉइड – क्रोमोनोमीटर विजेट का समय निकालें

समय कैसे एक चक्र से प्राप्त करने के लिए? मैंने getText, getFormat, getBase, आदि की कोशिश की, लेकिन उनमें से कोई भी काम नहीं कर सका।

उदाहरण कोड स्निपेट:

Chronometer t = (Chronometer)findViewById(R.id.toptime); long time = SystemClock.elapsedRealtime()-t.getBase(); Log.d(null,"Was: "+time); //time is not the proper time for some reason - it is a random number between 0 and 50 t.setBase(SystemClock.elapsedRealtime()); t.start(); 

वेब के समाधान से एकत्रित समाधान "एंड्रॉइड – क्रोमोनोमीटर विजेट का समय निकालें"

यदि आप क्रोनोमीटर वर्ग के स्रोत को देखते हैं, तो आप देखेंगे कि यह एक फ़ील्ड में बीता हुआ समय संग्रहीत नहीं करता है और यह प्रत्येक बार आंतरिक रूप से गणना करता है, जब वह प्रदर्शन को अपडेट करने की आवश्यकता होती है।

हालांकि यह आपके अपने कोड में समान करना आसान है:

 long elapsedMillis = SystemClock.elapsedRealtime() - chronometerInstance.getBase(); 

यह मानता है कि आपने अपनी घड़ी को इस तरह से शुरू किया है:

 chronometerInstance.setBase(SystemClock.elapsedRealtime()); chronometerInstance.start(); 

यहां एक पूर्ण उदाहरण है:

 public class ChronoExample extends Activity { Chronometer mChronometer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); mChronometer = new Chronometer(this); layout.addView(mChronometer); Button startButton = new Button(this); startButton.setText("Start"); startButton.setOnClickListener(mStartListener); layout.addView(startButton); Button stopButton = new Button(this); stopButton.setText("Stop"); stopButton.setOnClickListener(mStopListener); layout.addView(stopButton); Button resetButton = new Button(this); resetButton.setText("Reset"); resetButton.setOnClickListener(mResetListener); layout.addView(resetButton); setContentView(layout); } private void showElapsedTime() { long elapsedMillis = SystemClock.elapsedRealtime() - mChronometer.getBase(); Toast.makeText(ChronoExample.this, "Elapsed milliseconds: " + elapsedMillis, Toast.LENGTH_SHORT).show(); } View.OnClickListener mStartListener = new OnClickListener() { public void onClick(View v) { mChronometer.start(); showElapsedTime(); } }; View.OnClickListener mStopListener = new OnClickListener() { public void onClick(View v) { mChronometer.stop(); showElapsedTime(); } }; View.OnClickListener mResetListener = new OnClickListener() { public void onClick(View v) { mChronometer.setBase(SystemClock.elapsedRealtime()); showElapsedTime(); } }; } 

क्रोनोमीटर के बारे में कुछ भ्रामक बात यह है कि आप इसे स्टॉपवॉच के रूप में वास्तव में नहीं उपयोग कर सकते हैं जो आरंभ हो गया, बंद हो गया और फिर से पुनरारंभ हुआ। जब यह चल रहा है, तो यह हमेशा दिखाता है कि जब तक आप पिछली बार इसे रीसेट कर चुके हैं, तब तक यह कितनी बार चाहे कितनी देर तक और इस दौरान आप कितनी देर तक इसे रोक दिया है । जब इसे रोक दिया जाता है, तो यह प्रदर्शन को अद्यतन करने से रोकता है।

अगर आपको एक स्टॉपवॉच की तरह कुछ चाहिए तो आपको क्रोनोमीटर उप-क्लास करना होगा या फिर स्रोत का उपयोग करके अपना स्वयं का संस्करण बनाना होगा।

वैकल्पिक शब्द

मैं वास्तव में उपयोगी इस उदाहरण पाया, धन्यवाद nyenyec!

यह मेरे दो सेंट्स हैं, कैसे इसे एक वास्तविक स्टॉपवॉच फ़ंक्शन में बदलना है, बिना क्वार्टरिंग के उप-क्लासेसिंग बस mStronListener विधि को mChronometer (यह सब के बाद TextView से प्राप्त है) से पार्स करने के लिए परिवर्तित करें, मिलीसेकेंडों की गणना करें, और पिछली बार उस समय के आधार समय को समायोजित करने के लिए setBase () का उपयोग करें:

  View.OnClickListener mStartListener = new OnClickListener() { public void onClick(View v) { int stoppedMilliseconds = 0; String chronoText = mChronometer.getText().toString(); String array[] = chronoText.split(":"); if (array.length == 2) { stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 1000 + Integer.parseInt(array[1]) * 1000; } else if (array.length == 3) { stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 60 * 1000 + Integer.parseInt(array[1]) * 60 * 1000 + Integer.parseInt(array[2]) * 1000; } mChronometer.setBase(SystemClock.elapsedRealtime() - stoppedMilliseconds); mChronometer.start(); } }; 

@ यनीएइक +1: यहां एक उप वर्ग के बिना न्यायनेक की प्रतिक्रिया का उपयोग करते हुए, मैं इसके साथ समाप्त हुआ हूं।

  chronometer.setOnChronometerTickListener(new OnChronometerTickListener() { @Override public void onChronometerTick(Chronometer chronometer) { long elapsedMillis = SystemClock.elapsedRealtime() - chronometer.getBase(); if(elapsedMillis>THRESHOLD){ doYourStuff(); } } }); 

जहां थ्रेसहोल्ड है

 private static final int THRESHOLD_EXERSISE = 60000; //In milliseconds 

मेरा समाधान:

  public void starttimer(View view){ Button mybtn = (Button) view; if (mybtn.equals(findViewById(R.id.button1))) { mycm.setBase(SystemClock.elapsedRealtime() - elapsed); mycm.start(); } else { mycm.stop(); elapsed = SystemClock.elapsedRealtime() - mycm.getBase(); } } 

ऑन क्रेट में:

  mycm = (Chronometer) findViewById(R.id.chronometer1); elapsed = 0; 

लेआउट में दो बटन होते हैं, जो दोनों स्टार्ट-टिमर विधि (शुरू और बंद) कहते हैं

कुछ हद तक देर से प्रतिक्रिया, लेकिन मैं आज खुद को हल करने की कोशिश कर रहा था। मैं सिर्फ दृश्य के पाठ को पार्स कर चुका हूं:

  // Expects a string in the form MM:SS or HH:MM:SS public static int getSecondsFromDurationString(String value){ String [] parts = value.split(":"); // Wrong format, no value for you. if(parts.length < 2 || parts.length > 3) return 0; int seconds = 0, minutes = 0, hours = 0; if(parts.length == 2){ seconds = Integer.parseInt(parts[1]); minutes = Integer.parseInt(parts[0]); } else if(parts.length == 3){ seconds = Integer.parseInt(parts[2]); minutes = Integer.parseInt(parts[1]); hours = Integer.parseInt(parts[0]); } return seconds + (minutes*60) + (hours*3600); } 

इसलिए getSecondsFromDurationString को देखने के साथ कॉल करना .getText ()। ToString () आपको सेकंड में कुल समय बीते समय देता है (मेरा आवेदन किसी तरह का स्टॉप वॉच है, इसलिए आप इसे रोक सकते हैं और फिर से शुरू कर सकते हैं)।

आशा करता हूँ की ये काम करेगा।

  final Chronometer counter = (Chronometer) findViewById(R.id.chronometer1); counter.setOnChronometerTickListener(new OnChronometerTickListener() { public void onChronometerTick(Chronometer chronometer) { // TODO Auto-generated method stub chronometer.refreshDrawableState(); } }); final ToggleButton togglebutton = (ToggleButton) findViewById(R.id.togglebutton1); togglebutton.setOnClickListener(new OnClickListener() { public void onClick(View v) { // Perform action on clicks if (togglebutton.isChecked()) { counter.start(); } else { counter.stop(); } } }); 
 //ok here is the final changed code which works well import android.app.Activity; import android.os.Bundle; import android.os.SystemClock; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Chronometer; import android.widget.LinearLayout; import android.widget.Toast; public class HelloWidgetActivity extends Activity { Chronometer mChronometer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); mChronometer = new Chronometer(this); layout.addView(mChronometer); Button startButton = new Button(this); startButton.setText("Start"); startButton.setOnClickListener(mStartListener); layout.addView(startButton); Button stopButton = new Button(this); stopButton.setText("Stop"); stopButton.setOnClickListener(mStopListener); layout.addView(stopButton); Button resetButton = new Button(this); resetButton.setText("Reset"); resetButton.setOnClickListener(mResetListener); layout.addView(resetButton); setContentView(layout); } private void showElapsedTime() { long elapsedMillis = SystemClock.elapsedRealtime() - mChronometer.getBase(); Toast.makeText(HelloWidgetActivity.this, "Elapsed milliseconds: " + elapsedMillis, Toast.LENGTH_SHORT).show(); } View.OnClickListener mStartListener = new OnClickListener() { public void onClick(View v) { int stoppedMilliseconds = 0; String chronoText = mChronometer.getText().toString(); String array[] = chronoText.split(":"); if (array.length == 2) { stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 1000 + Integer.parseInt(array[1]) * 1000; } else if (array.length == 3) { stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 60 * 1000 + Integer.parseInt(array[1]) * 60 * 1000 + Integer.parseInt(array[2]) * 1000; } mChronometer.setBase(SystemClock.elapsedRealtime() - stoppedMilliseconds); mChronometer.start(); } }; View.OnClickListener mStopListener = new OnClickListener() { public void onClick(View v) { mChronometer.stop(); showElapsedTime(); } }; View.OnClickListener mResetListener = new OnClickListener() { public void onClick(View v) { mChronometer.setBase(SystemClock.elapsedRealtime()); mChronometer.stop(); showElapsedTime(); } }; }