最近趁着春节假期,打算系统的再扫一遍androidd知识,学习《Android编程权威指南第三版》,前6章讲了一个项目,关于地理知识问题解答
效果如下
如果作弊了,会检测到
功能点
新知识点
- ShowAnswer按钮点击后会消失的动画代码如下
int cx = mShowAnswerButton.getWidth() / 2;
int cy = mShowAnswerButton.getHeight() / 2;
float radius = mShowAnswerButton.getWidth();
// 参数为 目标,中心X坐标,中心Y坐标,开始宽度,结束宽度
Animator animator = ViewAnimationUtils.createCircularReveal(mShowAnswerButton, cx, cy, radius, 0);
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
mShowAnswerButton.setVisibility(View.INVISIBLE);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animator.start();
- 作弊能被检测到,方法是,在从QuizActivity界面点击cheat跳转到CheatActivity时,使用startIntentForResult()启动Intent,此时会携带一个请求码(这个请求码会自动返回到QuizActivity),然后在CheatActivity中,如果点击了ShowAnswer按钮,就修改请求码即可,然后返回到QuizActivity处理
在QuizActivity中跳转
startActivityForResult(intent,REQUEST_CODE_CHEAT);
在CheatActivity中设置
mShowAnswerButton.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) //动画在LOLLIPOP版本后才加入
@Override
public void onClick(View v) {
if (mAnswerIsTrue) {
mAnswerTextView.setText(R.string.true_button);
}
else {
mAnswerTextView.setText(R.string.false_button);
}
setAnswerShownResult(true);
...
private void setAnswerShownResult(boolean isAnswerShown) {
Intent data = new Intent();
data.putExtra(EXTRA_ANSWER_SHOWN, isAnswerShown);
setResult(RESULT_OK,data);
}
然后被set过的data返回到QuizActivity中,进行检测
//当startForResult带回的数据含有RESULT_OK和data有数据时,判定为cheat
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != Activity.RESULT_OK) {
return;
}
//判定是否进入的Cheat界面
if (requestCode == REQUEST_CODE_CHEAT) {
//判定是否点击了ShowAnswer按钮
if (data == null) {
return;
}
mIsCheater = CheatActivity.wasAnswerShown(data);
}
}
mIsCheater 即为是否作弊的标识 ,这里的wasAnswerShown在CheatActivity中,是一个静态方法
public static boolean wasAnswerShown(Intent result) {
return result.getBooleanExtra(EXTRA_ANSWER_SHOWN, false);
}
除此之外,代码中还有解决横屏的问题等,书中也有其他要求,比如设置一个自定义的Toast,最多作弊三次等等,不过这些都过于简单,就没有再实现了
如何调试,如何查看内存,如何适配版本等也在前6章有所介绍,和《第一行代码》比起来,这本书可能不适合纯小白,但是如果你有一点基础,那么看这本书一定让你收获颇丰!!
关注公众号 【小松的读书与成长】,回复“ 权威指南” 即可获得pdf
ps:不想关注也行,毕竟我也是从网上搜到的
链接:https://pan.baidu.com/s/1fV83_CgbSfmHXsNwOx011w
提取码:j45a