(按照功能图应该先讲文件读写,但单独讲有点不好讲,还是在后面讲需要文件存储的时候一起讲。)
题目编辑显示区(解题区)功能及实现:
说明:本区所有的组件都是textview,包括横竖线。所以整个app的textview超过100个,以至于android studio都给出了警告,但运行没问题,我也不知道警告有啥用。
本区功能:
一、点击背景变灰色,并且点击哪个才会变成灰色。如图:
逻辑:捕捉鼠标焦点,设置背景灰色,再点击别的时候,前一个背景要恢复成黄色。
实现代码:
//遍历设置81个textview点击后背景变为灰色
for (TextView viewall : textViews) {
viewall.setOnTouchListener(new View.OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mytextview.setBackgroundColor(Color.YELLOW);//将前一个textview的背景色改为黄色
mytextview = viewall;//所有对mytextview的操作变成对viewall的操作?。
viewall.setBackgroundColor(Color.GRAY);
showsamenum(mytextview, viewall);
}
return false; // 返回true表示已消费事件,不再传递
}
});
}
说明:textviews是81个可填写数字格子的textview组成的数组。
textViews = new TextView[]{
textview11, textview12, textview13, textview14, textview15, textview16, textview17, textview18, textview19,
textview21, textview22, textview23, textview24, textview25, textview26, textview27, textview28, textview29,
textview31, textview32, textview33, textview34, textview35, textview36, textview37, textview38, textview39,
textview41, textview42, textview43, textview44, textview45, textview46, textview47, textview48, textview49,
textview51, textview52, textview53, textview54, textview55, textview56, textview57, textview58, textview59,
textview61, textview62, textview63, textview64, textview65, textview66, textview67, textview68, textview69,
textview71, textview72, textview73, textview74, textview75, textview76, textview77, textview78, textview79,
textview81, textview82, textview83, textview84, textview85, textview86, textview87, textview88, textview89,
textview91, textview92, textview93, textview94, textview95, textview96, textview97, textview98, textview99
};
这里面关键就是这个:
viewall.setOnTouchListener(new View.OnTouchListener() {}
"据说"上面这行就是个点击监听,反正我也不懂。
下面两行我个人觉得是很神奇的代码:
mytextview.setBackgroundColor(Color.YELLOW);//将前一个textview的背景色改为黄色 mytextview = viewall;//所有对mytextview的操作变成对viewall的操作?。
我后来自己看都看不懂,不知道当时是怎么想的,不过挺奇妙的。mytextview是个public变量,整个app都要使用,是个隐藏的textview,只作为中间交换数据使用,就是当前点击的格子,但在点击另一个格子时它表示的又是前一个格子的位置,作用就是修改背景使用。如:点击时它背景变成黄色,然后当前点击的格子(viewall)变成灰色,但它还是黄色,所以再点击的时候,它就变成了前一个格子了。(有点绕。)
二、点击数字如有重复会全部标记出来,全部背景为灰色。
这里有个自定义函数:showsamenum(mytextview, viewall); 通过遍历81个单元格找与点击格子(mytextview)相同的数字,并设置背景灰色。
代码:
public void showsamenum(TextView view, TextView view1) {//TextView作为形参
int i = 0;
for (TextView textView : textViews) {
if (textView.getText().toString().equals(view.getText().toString()) && view.getText().toString() != "") {
textView.setBackgroundColor(Color.GRAY);
i ++;
//如果i=9则设置textview1-9前背景色相同
if (i == 9&&biaozhi==true) {
//view1.setTextColor(Color.parseColor("#03A9F4"));//设置前背景色相同,其实还可以按,并没有失效。
}else if(i==9&&view.getText().toString().equals(view1.getText().toString())){
view1.setTextColor(Color.parseColor("#03A9F4"));
}
}
}
}
并于viewwall的使用此处不讲,因为那是“候选数字区”功能,知道代码不能放在这里,但,放这里比较 方便。
下篇讲,候选数字区功能。