100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > android练习 九宫格解锁

android练习 九宫格解锁

时间:2019-11-05 10:27:33

相关推荐

android练习 九宫格解锁

文章目录

思路样式实现实践 - 先画一个圆实践反馈初步实现样式 实现响应如何自定义View的响应事件滑动坐标与不同的圆圈对应 实现画线与画点效果效果实现方式逻辑代码实现 最终效果与反馈不足

思路

主界面:

设置密码、验证密码、修改密码

fragment

实现方式,自定义View。

如何自定义View?自定义什么View?自定义View需要什么样子的功能?能否让它更加有可修改性?

参考资料:

Android 自定义控件实现九宫格解锁

样式实现

实践 - 先画一个圆

自定义View的样式实现

获取界面大小,获取中心坐标,获取每个半径的大小

@Overrideprotected void onDraw(Canvas canvas) {// super.onDraw(canvas);drawDefaultCircle(canvas);}private void drawDefaultCircle(Canvas canvas) {if (viewHeight == 0) {//获取view的长和宽。之后绘制圆形Log.d(TAG, "必须在onDraw中,才能获得view的大小");viewHeight = getMeasuredHeight();viewWidth = getMeasuredWidth();}float minLength = Math.min(viewHeight, viewWidth); //画正方形式的九宫格center_x = (getRight() - getLeft()) / 2;center_y = (getBottom() - getTop()) / 2; //获得绘制的中心点int pointNumber = getResources().getInteger(R.integer.point_number);int rowNumber = (int) Math.sqrt(pointNumber); //画几排?每排几个?因为是正方形所以是排数和行数相同circleRadius_default = minLength / rowNumber * 2 + rowNumber + 1; //2n个半径,每个圆相隔1个半径(带系统边界) = n+1canvas.drawCircle(center_x, center_y, circleRadius_default, paint_default); //先画一个看看}

实践反馈

画笔粗一点为什么半径大小不对?

算术优先级- -。circleRadius_default = minLength / (rowNumber * 2 + rowNumber + 1);

初步实现样式

private void init() {paint_default = new Paint(Paint.ANTI_ALIAS_FLAG);paint_default.setStyle(Paint.Style.STROKE); //描边画笔paint_default.setColor(getContext().getColor(R.color.Color8328_1)); //画笔颜色paint_default.setStrokeWidth(5);//这个时候用getMeasuredHeight()是不是还不会显示的哇。因为View还没有初始化viewHeight = getMeasuredHeight();viewWidth = getMeasuredWidth();}@Overrideprotected void onDraw(Canvas canvas) {// super.onDraw(canvas);drawDefaultCircle(canvas);}private void drawDefaultCircle(Canvas canvas) {if (viewHeight == 0) {//获取view的长和宽。之后绘制圆形Log.d(TAG, "必须在onDraw中,才能获得view的大小");viewHeight = getMeasuredHeight();viewWidth = getMeasuredWidth();}float minLength = Math.min(viewHeight, viewWidth); //画正方形式的九宫格// Log.d(TAG, "view的长度为:");center_x = (getRight() - getLeft()) / 2;center_y = (getBottom() - getTop()) / 2; //获得绘制的中心点int pointNumber = getResources().getInteger(R.integer.point_number);//画几排?每排几个?因为是正方形所以是排数和行数相同int rowNumber = (int) Math.sqrt(pointNumber); Log.d(TAG, "行列数 " + rowNumber);//2n个半径,每个圆相隔1个半径(带系统边界) = n+1circleRadius_default = minLength / (rowNumber * 2 + rowNumber + 1); for (int i = 0; i < rowNumber; i++) {//一排,修改y坐标float point_y = center_y - (1 - i) * 3 * circleRadius_default;for (int j = 0; j

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。