sz1370

شمارش گر معکوس CountDownTimer

16 ارسال در این موضوع قرار دارد

سلام دوستان .من یک پروژه دارم قراره از طریق ساعت گوشی زمان رو در نظر بگیره و تا روز تولدم تا سال آینده بطور makoos  بشماره و بگه تا روز تولد من چند روز و چندساعت و دقیقه و ثانیه مونده:مثلا تاریخ و ساعت امروز رو بطور اتوماتیک در نظر بگیره و بگه تا روز 13 برج 3 سال 94 (94/3/12) چقدر مونده!!!   کسی می تونه تو نوشتن کدش کمکم کنه؟

[align=center] فرمتش به این صورت باشه  120 روز  6666:666:66

[/align]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای اینکار بدین صورت عمل کنید

یک کلاس بصورت زیر ایجاد کنید:

[shcode=java]

public class CountdownChronometer extends Chronometer {

private static final String TAG = "CountdownChronometer";

private static final String FAST_FORMAT_DHHMMSS = "%1$02d:%2$02d:%3$02d:%4$02d";

private static final String FAST_FORMAT_HMMSS = "%1$02d:%2$02d:%3$02d";

private static final String FAST_FORMAT_MMSS = "%1$02d:%2$02d";

private static final char TIME_PADDING = '0';

private static final char TIME_SEPARATOR = ':';

private long mBase;

private boolean mVisible;

private boolean mStarted;

private boolean mRunning;

private boolean mLogged;

private String mFormat;

private Formatter mFormatter;

private Locale mFormatterLocale;

private Object[] mFormatterArgs = new Object[1];

private StringBuilder mFormatBuilder;

private OnChronometerTickListener mOnChronometerTickListener;

private OnChronometerTickListener mOnCountdownCompleteListener;

private StringBuilder mRecycle = new StringBuilder(8);

private String mChronoFormat;

private static final int TICK_WHAT = 3;

public CountdownChronometer(Context context) {

this(context, null, 0, 0);

}

public CountdownChronometer(Context context, long base) {

this(context, null, 0, base);

}

public CountdownChronometer(Context context, AttributeSet attrs) {

this(context, attrs, 0, 0);

}

public CountdownChronometer(Context context, AttributeSet attrs,

int defStyle, long base) {

super(context, attrs, defStyle);

init(base);

}

private void init(long base) {

mBase = base;

updateText(System.currentTimeMillis());

}

@Override

public void setBase(long base) {

mBase = base;

dispatchChronometerTick();

updateText(System.currentTimeMillis());

}

@Override

public long getBase() {

return mBase;

}

@Override

public void setFormat(String format) {

mFormat = format;

if (format != null && mFormatBuilder == null) {

mFormatBuilder = new StringBuilder(format.length() * 2);

}

}

@Override

public String getFormat() {

return mFormat;

}

public void setCustomChronoFormat(String chronoFormat) {

this.mChronoFormat = chronoFormat;

}

public String getCustomChronoFormat() {

return mChronoFormat;

}

@Override

public void setOnChronometerTickListener(OnChronometerTickListener listener) {

mOnChronometerTickListener = listener;

}

@Override

public OnChronometerTickListener getOnChronometerTickListener() {

return mOnChronometerTickListener;

}

public void setOnCompleteListener(OnChronometerTickListener listener) {

mOnCountdownCompleteListener = listener;

}

public OnChronometerTickListener getOnCompleteListener() {

return mOnCountdownCompleteListener;

}

@Override

public void start() {

mStarted = true;

updateRunning();

}

@Override

public void stop() {

mStarted = false;

updateRunning();

}

public void setStarted(boolean started) {

mStarted = started;

updateRunning();

}

@Override

protected void onDetachedFromWindow() {

super.onDetachedFromWindow();

mVisible = false;

updateRunning();

}

@Override

protected void onWindowVisibilityChanged(int visibility) {

super.onWindowVisibilityChanged(visibility);

mVisible = visibility == VISIBLE;

updateRunning();

}

private synchronized boolean updateText(long now) {

long seconds = mBase - now;

seconds /= 1000;

boolean stillRunning = true;

if (seconds <= 0) {

stillRunning = false;

seconds = 0;

}

String text = formatRemainingTime(mRecycle, seconds);

if (mFormat != null) {

Locale loc = Locale.getDefault();

if (mFormatter == null || !loc.equals(mFormatterLocale)) {

mFormatterLocale = loc;

mFormatter = new Formatter(mFormatBuilder, loc);

}

mFormatBuilder.setLength(0);

mFormatterArgs[0] = text;

try {

mFormatter.format(mFormat, mFormatterArgs);

text = mFormatBuilder.toString();

} catch (IllegalFormatException ex) {

if (!mLogged) {

Log.w(TAG, "Illegal format string: " + mFormat);

mLogged = true;

}

}

}

setText(text);

return stillRunning;

}

private void updateRunning() {

boolean running = mVisible && mStarted;

if (running != mRunning) {

if (running) {

if (updateText(System.currentTimeMillis())) {

dispatchChronometerTick();

mHandler.sendMessageDelayed(

Message.obtain(mHandler, TICK_WHAT), 1000);

} else {

running = false;

mHandler.removeMessages(TICK_WHAT);

}

} else {

mHandler.removeMessages(TICK_WHAT);

}

mRunning = running;

}

}

private Handler mHandler = new Handler() {

public void handleMessage(Message m) {

if (mRunning) {

if (updateText(System.currentTimeMillis())) {

dispatchChronometerTick();

sendMessageDelayed(Message.obtain(this, TICK_WHAT), 1000);

} else {

dispatchCountdownCompleteEvent();

stop();

}

}

}

};

void dispatchChronometerTick() {

if (mOnChronometerTickListener != null) {

mOnChronometerTickListener.onChronometerTick(this);

}

}

void dispatchCountdownCompleteEvent() {

if (mOnCountdownCompleteListener != null) {

mOnCountdownCompleteListener.onChronometerTick(this);

}

}

private String formatRemainingTime(StringBuilder recycle,

long elapsedSeconds) {

long days = 0;

long hours = 0;

long minutes = 0;

long seconds = 0;

if (elapsedSeconds >= 86400) {

days = elapsedSeconds / 86400;

elapsedSeconds -= days * 86400;

}

if (elapsedSeconds >= 3600) {

hours = elapsedSeconds / 3600;

elapsedSeconds -= hours * 3600;

}

if (elapsedSeconds >= 60) {

minutes = elapsedSeconds / 60;

elapsedSeconds -= minutes * 60;

}

seconds = elapsedSeconds;

if (mChronoFormat != null) {

return formatRemainingTime(recycle, mChronoFormat, days, hours,

minutes, seconds);

} else if (days > 0) {

return formatRemainingTime(recycle, FAST_FORMAT_DHHMMSS, days,

hours, minutes, seconds);

} else if (hours > 0) {

return formatRemainingTime(recycle, FAST_FORMAT_HMMSS, hours,

minutes, seconds);

} else {

return formatRemainingTime(recycle, FAST_FORMAT_MMSS, minutes,

seconds);

}

}

private static String formatRemainingTime(StringBuilder recycle,

String format, long days, long hours, long minutes, long seconds) {

if (FAST_FORMAT_DHHMMSS.equals(format)) {

StringBuilder sb = recycle;

if (sb == null) {

sb = new StringBuilder(8);

} else {

sb.setLength(0);

}

sb.append(days);

sb.append(TIME_SEPARATOR);

if (hours < 10) {

sb.append(TIME_PADDING);

} else {

sb.append(toDigitChar(hours / 10));

}

sb.append(toDigitChar(hours % 10));

sb.append(TIME_SEPARATOR);

if (minutes < 10) {

sb.append(TIME_PADDING);

} else {

sb.append(toDigitChar(minutes / 10));

}

sb.append(toDigitChar(minutes % 10));

sb.append(TIME_SEPARATOR);

if (seconds < 10) {

sb.append(TIME_PADDING);

} else {

sb.append(toDigitChar(seconds / 10));

}

sb.append(toDigitChar(seconds % 10));

return sb.toString();

} else {

return String.format(format, days, hours, minutes, seconds);

}

}

private static String formatRemainingTime(StringBuilder recycle,

String format, long hours, long minutes, long seconds) {

if (FAST_FORMAT_HMMSS.equals(format)) {

StringBuilder sb = recycle;

if (sb == null) {

sb = new StringBuilder(8);

} else {

sb.setLength(0);

}

sb.append(hours);

sb.append(TIME_SEPARATOR);

if (minutes < 10) {

sb.append(TIME_PADDING);

} else {

sb.append(toDigitChar(minutes / 10));

}

sb.append(toDigitChar(minutes % 10));

sb.append(TIME_SEPARATOR);

if (seconds < 10) {

sb.append(TIME_PADDING);

} else {

sb.append(toDigitChar(seconds / 10));

}

sb.append(toDigitChar(seconds % 10));

return sb.toString();

} else {

return String.format(format, hours, minutes, seconds);

}

}

private static String formatRemainingTime(StringBuilder recycle,

String format, long minutes, long seconds) {

if (FAST_FORMAT_MMSS.equals(format)) {

StringBuilder sb = recycle;

if (sb == null) {

sb = new StringBuilder(8);

} else {

sb.setLength(0);

}

if (minutes < 10) {

sb.append(TIME_PADDING);

} else {

sb.append(toDigitChar(minutes / 10));

}

sb.append(toDigitChar(minutes % 10));

sb.append(TIME_SEPARATOR);

if (seconds < 10) {

sb.append(TIME_PADDING);

} else {

sb.append(toDigitChar(seconds / 10));

}

sb.append(toDigitChar(seconds % 10));

return sb.toString();

} else {

return String.format(format, minutes, seconds);

}

}

private static char toDigitChar(long digit) {

return (char) (digit + '0');

}

}

[/shcode]

سپس در Layout :

[shcode=xml]

  

                android:id="@+id/chronometer"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_centerHorizontal="true"

                android:textSize="16sp" />

[/shcode]

فراخوانی:

[shcode=java]

CountdownChronometer countdowner = (CountdownChronometer)findViewById(R.id.chronometer);

countdowner.setBase(((System.currentTimeMillis()-Long.parseLong(time))/1000)%60);

        countdowner.start();

[/shcode]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام تشکر ولی از بیشتر خط ها  خطا میده با اینکه فایل های موردنظر رو هم Import می کنم .... چیکار کنم؟

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

Import های مورد نیاز نمونه کد بالا:

[shcode=java]

import java.util.Formatter;

import java.util.IllegalFormatException;

import java.util.Locale;

import android.content.Context;

import android.os.Handler;

import android.os.Message;

import android.os.SystemClock;

import android.util.AttributeSet;

import android.util.Log;

import android.widget.Chronometer;

[/shcode]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام ممنون خطاهام رفع شد ولی در کل برنامه رو اجرا نمی کنه خطا میده

Import های مورد نیاز نمونه کد بالا:

[shcode=java]

import java.util.Formatter;

import java.util.IllegalFormatException;

import java.util.Locale;

import android.content.Context;

import android.os.Handler;

import android.os.Message;

import android.os.SystemClock;

import android.util.AttributeSet;

import android.util.Log;

import android.widget.Chronometer;

[/shcode]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

لطفا کدی که در Layout تعریف کردید رو بزارید؟

[shcode=xml]

 

                android:id="@+id/chronometer"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_centerHorizontal="true"

                android:textSize="16sp" />

[/shcode]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام آقا ی مهندس دقیقا همینجوری که گفتید نوشتم بجا yourpackagename نام پکیج خودمو گذاشتم بازم صفحمو اجرا نمی کنه خطای عدم اجرا میده

لطفا کدی که در Layout تعریف کردید رو بزارید؟

[shcode=xml]

 

                android:id="@+id/chronometer"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_centerHorizontal="true"

                android:textSize="16sp" />

[/shcode]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

تایم خود را بصورت timeStamp باید وارد کنید

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

[quote=timeStamp یعنی چطوری؟

Farzad Sarseify pid=10361 dateline=1425369571]

تایم خود را بصورت timeStamp باید وارد کنید

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

بدین صورت تایم خود را به TimeStamp تبدیل کنید

[shcode=java]Timestamp timestamp = Timestamp.valueOf("2007-09-23 10:10:10.0");[/shcode]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
ببخشید این خط رو من تو صفحه main activitiy  بزارم !!!اگر با اون برنامه من جواب گرفتید میشه همونو واسم پیوست کنید؟ !!! ممنون میشم

بدین صورت تایم خود را به TimeStamp تبدیل کنید

[shcode=java]Timestamp timestamp = Timestamp.valueOf("2007-09-23 10:10:10.0");[/shcode]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

بله باید این timestamp را به کنترل شمارنده ست کنید تا عمل کنید.شما اگر فقط تایم دارید میتوانید تایم را به تبدیل کنید و از تاریخ صرف نظر کنید.

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
جواب نمیده بهم!!! :(   نه دیگه من هم تعداد روزو ساعت و دقیقه و ثانیه باقیمانده رو می خوام

بله باید این timestamp را به کنترل شمارنده ست کنید تا عمل کنید.شما اگر فقط تایم دارید میتوانید تایم را به تبدیل کنید و از تاریخ صرف نظر کنید.

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
اقا ي مهندس من هر جور تونستم نوشتم ولي فكر كنم دارم شتبا مي نويسم كه بهم خطا ميده به هيچ راهي قابل حل شدن نيست اگر وقتشو داريد ممنون ميشم كمكم كنيد.....

بله باید این timestamp را به کنترل شمارنده ست کنید تا عمل کنید.شما اگر فقط تایم دارید میتوانید تایم را به تبدیل کنید و از تاریخ صرف نظر کنید.

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری