/**
-
Callback fired on regular interval.
-
@param millisUntilFinished The amount of time until finished.
*/
public abstract void onTick(long millisUntilFinished);
/**
- Callback fired when the time is up.
*/
public abstract void onFinish();
private static final int MSG = 1;
// handles counting down
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
synchronized (CountDownTimer.this) {
// 计算剩余总时间
final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime();
// 小于等于 0 ,回调 onFinish
if (millisLeft <= 0) {
onFinish();
} else if (millisLeft < mCountdownInterval) { // 小于计时间隔 ,delayed 一个消息
// no tick, just delay until done
sendMessageDelayed(obtainMessage(MSG), millisLeft);
} else {
long lastTickStart = SystemClock.elapsedRealtime();
onTick(millisLeft);
// take into account user’s onTick taking time to execute
long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime();
// special case: user’s onTick took more than interval to
// complete, skip to next interval
while (delay < 0) delay += mCountdownInterval;
sendMessageDelayed(obtainMessage(MSG), delay);
}
}
}
};
使用:倒计时
final CountDownTimer timer = new CountDownTimer(60000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
get_verfiy_code.setText(millisUntilFinished/1000 + “秒”);
}
@Override
public void onFinish() {
get_verfiy_code.setEnabled(true);
get_verfiy_code.setText(“获取验证码”);
}
};
点击按钮的时候:
get_verfiy_code.setEnabled(false);
timer.start();
popupwinow全部如下:
/**
-
Created by
-
xiaomi on 2017/9/8.
*/
public class VerifyPopupWindow {
/**
- 手机验证popupwindow
*/
private EditText phone_number;
private EditText input_image_code;
private ImageView image_code;
private EditText input_code;
private Button sure;
private String inputcode;
private String realCode;
private Button no_verify;
private CustomPopWindow mPopWindow;
private Button get_verfiy_code;
private Context mContext;
public VerifyPopupWindow(Context context){
this.mContext=context;
}
public void showPopupWindow(){
View contentView = LayoutInflater.from(mContext).inflate(R.layout.user_phone_number, null);
phone_number = (EditText) contentView.findViewById(R.id.phone_number); //填入手机号
input_image_code=(EditText)contentView.findViewById(R.id.input_image_code);//填入图片验证码
image_code=(ImageView)contentView.findViewById(R.id.image_code); //图片验证码
input_code=(EditText) contentView.findViewById(R.id.input_code); //填入手机验证码
sure=(Button)contentView.findViewById(R.id.user_verfiy_submit); //确定绑定
no_verify=(Button)contentView.findViewById(R.id.ignore_verfiy_submit); //暂不验证
get_verfiy_code=(Button)contentView.findViewById(R.id.get_verfiy_code);//获取手机验证码
final CountDownTimer timer = new CountDownTimer(60000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
get_verfiy_code.setText(millisUntilFinished/1000 + “秒”);
}
@Override
public void onFinish() {
get_verfiy_code.setEnabled(true);
get_verfiy_code.setText(“获取验证码”);
}
};
image_code.setImageBitmap(Code.getInstance().createBitmap()); //初始化验证码
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.image_code:
image_code.setImageBitmap(Code.getInstance().createBitmap());
break;
case R.id.user_verfiy_submit:
if (TextUtils.isEmpty(phone_number.getText().toString())){
Toast.makeText(mContext,“请您输入手机号码”, Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(input_code.getText().toString())){
Toast.makeText(mContext,“请您输入手机验证码”, Toast.LENGTH_SHORT).show();
return;
}
PostFormBuilder builder= OkHttpUtils.post();
builder
.addParams(“tel”,phone_number.getText().toString())
.addParams(“telyzm”,input_code.getText().toString());
builder.build()
.execute(new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
}
@Override
public void onResponse(String response, int id) {
try{
JSONObject jsonObject=new JSONObject(response);
int staus=jsonObject.getInt(“staus”);
if (staus==1){
mPopWindow.dissmiss();
Toast.makeText(mContext,“恭喜您,账号绑定成功!”, Toast.LENGTH_SHORT).show();
}else {
String message=jsonObject.getString(“msg”);
if (message!=null){
Toast.makeText(mContext,message, Toast.LENGTH_SHORT).show();
}
}
}catch (Exception e){
e.printStackTrace();
}
}
});
break;
case R.id.ignore_verfiy_submit:
mPopWindow.dissmiss();
break;
case R.id.get_verfiy_code:
// MyCountDownTimer.start();
inputcode=input_image_code.getText().toString();
realCode = Code.getInstance().getCode();
if (TextUtils.isEmpty(phone_number.getText().toString())){
Toast.makeText(mContext,“请您输入手机号码”, Toast.LENGTH_SHORT).show();
return;
}
if (realCode.equalsIgnoreCase(inputcode)){
//发送手机信息到服务器,通知服务端发验证码,并获取验证码。
getVerifyCode(phone_number.getText().toString());
}else{
Toast.makeText(mContext,“您输入的验证码有误,请重新输入”, Toast.LENGTH_SHORT).show();
}
get_verfiy_code.setEnabled(false);
timer.start();
break;
}
}
};
image_code.setOnClickListener(listener);
sure.setOnClickListener(listener);
no_verify.setOnClickListener(listener);
get_verfiy_code.setOnClickListener(listener);
mPopWindow = new CustomPopWindow.PopupWindowBuilder(mContext)
.setView(contentView)
.enableOutsideTouchableDissmiss(false)// 设置点击PopupWindow之外的地方,popWindow不关闭,如果不设置这个属性或者为true,则关闭
.enableBackgroundDark(true) //弹出popWindow时,背景是否变暗
.setBgDarkAlpha(0.7f) // 控制亮度
.setOnDissmissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
Log.e(“TAG”,“onDismiss”);
}
})
.create();
mPopWindow.showAtLocation(contentView, Gravity.CENTER, 0, 0);
}
//把手机后台获取手机验证码
public void getVerifyCode(String phoneNumber){
try {
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。
在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。需要的朋友可以私信我【资料】或者 点这里 免费领取
还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。 领取地址: Android学习PDF+架构视频+最新面试文档+源码笔记
伐,才能不被时代所淘汰。
在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。需要的朋友可以私信我【资料】或者 点这里 免费领取
[外链图片转存中…(img-eOxovxlJ-1711049483907)]
[外链图片转存中…(img-ubMZ3V4W-1711049483908)]
[外链图片转存中…(img-1g0LkReu-1711049483908)]
还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。 领取地址: Android学习PDF+架构视频+最新面试文档+源码笔记