上一节,为记事本添加了手写的功能,但是没有实现底部按钮的各种功能,这节就先实现撤销,恢复和清空的功用。
因为不会录制屏幕成gif图片,所以就以图片形式给出吧,不是很形象,凑合着看:
显然,需要为底部GridView的添加item单击事件:
private GridView paint_bottomMenu;
paint_bottomMenu = (GridView)findViewById(R.id.paintBottomMenu); paint_bottomMenu.setOnItemClickListener(new MenuClickEvent());
下面就是在监听器中实现具体的功能:
1.删除功能
1)取得最后一个字的位置
2)将第0个到倒数第二个位置的所有内容设置为自定义editText的内容,间接实现删除最后一个字的功能
3)更新最后一个字的位置为删除后的最后一个字的位置
3)将删除的字存储在列表中(其实存储在栈中更好,因为是先进后出),用于恢复。
代码如下:
private ArrayList<CharSequence> deleteChar = new ArrayList<CharSequence>();
//删除 case 2: Editable editable = et_handwrite.getText(); //找到最后一个手写字,并删除最后一个手写字 int selectionEnd = et_handwrite.getSelectionEnd(); System.out.println("end = "+ selectionEnd); if(selectionEnd < 1){ et_handwrite.setText(""); } else if(selectionEnd == 1){ et_handwrite.setText(""); CharSequence deleteCharSeq = editable.subSequence(0,1); deleteChar.add(deleteCharSeq); } else{ System.out.println("delete"); CharSequence charSeq = editable.subSequence(0, selectionEnd - 1); CharSequence deleteCharSeq = editable.subSequence(selectionEnd - 1,selectionEnd); et_handwrite.setText(charSeq); et_handwrite.setSelection(selectionEnd - 1); //将删除的字存储到列表中,以便恢复使用 deleteChar.add(deleteCharSeq); } break;
2. 恢复功能:
1)取出删除列表中的最后一个元素
2)将取出的元素添加在自定义editText的末尾
3)从删除列表中删掉最后一个元素
//恢复
case 3:
//取出删除列表中的元素
int length = deleteChar.size();
if(length > 0){
et_handwrite.append(deleteChar.get(deleteChar.size()-1));
deleteChar.remove(deleteChar.size()-1);
}
break;
3.清空功能:
1)创建Dialog,弹出是否删除提示
2)为Dialog添加PositiveButton和setNegativeButton
3)在PositiveButton单击事件中,设置自定义editText的内容为空
//清空屏幕
case 4 :
if(et_handwrite.getSelectionEnd() > 0){
AlertDialog.Builder builder = new Builder(HandWriteActivity.this);
builder.setTitle("您确定要清空所有吗?");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
et_handwrite.setText("");
dialog.cancel();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
Dialog dialog = builder.create();
dialog.show();
}
break;
这样,手写的三个基本功能就已实现,对于设置画笔的粗细和颜色,以后再做。