Android 인증번호 카운트다운 표시 효과 가 져 오기
최근 에 쓴 것 은 모두 비교적 간단 하고 기초 가 있 지만 간단 하 다 고 해서 익숙 한 것 이 아니 라 기초 가 있다 고 해서 큰 소 가 돌아 가 는 것 이 아니 라 하,중 소 송아지 도 돌아 갈 수 있다.이것 은 초보 자 에 게 쓴 것 이다.
먼저 효과 도 를 만들어 라.
코드 실현 방식 도 매우 간단 합 니 다.여기 서 첫 번 째 실현 방식 을 추천 하고 여러분 에 게 도 적합 합 니 다.바로 Countdown Timer 를 직접 계승 하여 실현 하 는 것 입 니 다.
Countdown Timer 라 는 종 류 는 매우 간단 하기 때문에 이 를 계승 할 때 구조 방법 을 다시 쓰 고 가상 방법 을 실현 해 야 한다.
구조 방법의 두 매개 변 수 는 각각(카운트다운 시작 시간,간격)이다.
또 다른 두 가지 방법 은 onTick(아직 남 은 시간)입 니 다.시간 이 끝 난 후에 하고 싶 은 시간 은 onFinish()에서 할 수 있 습 니 다.
주의해 야 할 것 은 모든 시간 을 밀리초 형식 으로 하기 때문에 사용 할 때 1000 개의 장 사 를 제거 하 는 것 을 기억 해 야 한다.
그러나 제 가 사용 하 는 것 은 개인 내부 류 의 방식 으로 외부 류 에 인용 이 존재 하기 때문에 메모리 누 출 을 방지 하기 위해 Activity 가 소각 할 때 비 워 두 는 것 에 주의해 야 합 니 다.마찬가지 로 우 리 는 중복 생 성 대상 을 피해 야 합 니 다.
또 다른 방식 은 우리 가 자주 사용 하 는 Handler+Thread 방식 으로 이 루어 지 는 것 이다.그러나 이 루어 질 때 도 메모리 누 출 을 조심해 야 합 니 다.사용자 가 Activity 를 없 앨 때 타이머 스 레 드 가 순환 하지 않도록 주의해 야 합 니 다.이것 은 tag 탭 을 설정 하여 판단 할 수 있 습 니 다.
이렇게 소각 할 때 이 tag 라벨 을 false 로 설정 하여 스 레 드 의 실행 을 끝 냅 니 다!
다음은 구현 코드 입 니 다.
package com.example.nanchen.timerdemo;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button mBtnGetCode;
private TimeCount mTimeCount;
private Button mBtnGetCode2;
private boolean timeFlag = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtnGetCode = (Button) findViewById(R.id.main_btn_get_code);
mBtnGetCode.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mTimeCount = null;
mTimeCount = new TimeCount(60 * 1000, 1000);
mTimeCount.start();
}
});
mBtnGetCode2 = (Button) findViewById(R.id.main_btn_get_code_2);
mBtnGetCode2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mBtnGetCode2.setClickable(false);
mBtnGetCode2.setBackgroundColor(getResources().getColor(R.color.btn_unable));
timeFlag = true;
new Thread() {
@Override
public void run() {
super.run();
for (int i = 59; i >= 0 && timeFlag; i--) {
try {
sleep(1000);
Message msg = Message.obtain();
msg.what = i;
mHandler.sendMessage(msg);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
});
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what > 0) {
mBtnGetCode2.setText("(" + msg.what + ") ");
} else {
mBtnGetCode2.setText(" ");
mBtnGetCode2.setClickable(true);
mBtnGetCode2.setBackgroundColor(getResources().getColor(R.color.colorAccent));
}
}
};
/**
* Activity ,
*/
@Override
protected void onDestroy() {
super.onDestroy();
mTimeCount = null;
timeFlag = false;
}
/**
*
*/
private class TimeCount extends CountDownTimer {
/**
* @param millisInFuture The number of millis in the future from the call
* to {@link #start()} until the countdown is done and {@link #onFinish()}
* is called.
* @param countDownInterval The interval along the way to receive
* {@link #onTick(long)} callbacks.
*/
public TimeCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
/**
*
*
* @param millisUntilFinished
*/
@Override
public void onTick(long millisUntilFinished) {
mBtnGetCode.setClickable(false);
mBtnGetCode.setBackgroundColor(getResources().getColor(R.color.btn_unable));
mBtnGetCode.setText("(" + millisUntilFinished / 1000 + ") ");
}
/**
*
*/
@Override
public void onFinish() {
mBtnGetCode.setClickable(true);
mBtnGetCode.setText(" 1");
mBtnGetCode.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
}
}
}
간단하게 xml 파일 을 보 겠 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.nanchen.timerdemo.MainActivity">
<Button
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/main_btn_get_code"
android:text=" 1"
android:background="@color/colorPrimaryDark"/>
<TextView
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="@+id/main_line1"
android:background="@color/btn_unable"
android:layout_below="@+id/main_btn_get_code"
android:layout_marginTop="10dp"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/main_line1"
android:layout_marginTop="10dp"
android:text=" 2"
android:id="@+id/main_btn_get_code_2"
android:background="@color/colorAccent"/>
</RelativeLayout>
마지막 으로 쓰 기:코드 와 실현 은 매우 간단 하지만,당신 은 힘 들 이지 않 을 것 입 니 다.하지만 전재 한다 면,본문 링크 를 남 겨 두 세 요~thank you!github 링크:https://github.com/nanchen2251/TimerDemo
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.