android 数字解锁键盘

在这里插入图片描述

package com.shunwan.cloudphone.view;

import android.content.Context;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.shunwan.cloudphone.R;

public class DigitalUnlockView extends ViewGroup implements View.OnClickListener {

    private int circleRadius = 50;


    private int textColor;

    private int horizontalInterval = 70;

    private int verticalInterval = 0;

    private int deleteTextSize = 16;

    private String[] data = new String[] {"1","2","3","4","5","6","7","8","9","","0","","","","DEL"};

    private String delText = CANCEL;

    public static final String DEL = "删除";
    public static final String CANCEL = "取消";
    public DigitalUnlockView(Context context) {
        super(context);
        init(context);
    }

    public DigitalUnlockView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public DigitalUnlockView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(Context context) {
        circleRadius = dp2px(context,20);
        horizontalInterval = dp2px(context,30);
        verticalInterval = dp2px(context,15);
        for (int i = 0; i< data.length; i++) {
            TextView textView = (TextView) LayoutInflater.from(context).inflate(R.layout.view_circle_text,null);

            textView.setWidth(circleRadius * 2);
            textView.setHeight(circleRadius * 2);

            textView.setText(data[i]);
            if (data[i].equals("DEL")) {
                textView.setText(delText);
            }
            if ("".equals(data[i])) {
                textView.setClickable(false);
            } else {
                textView.setOnClickListener(this);
            }

            if (i == data.length - 1) {
                textView.setTextSize(deleteTextSize);
            }
            addView(textView);
        }
    }

    public void setDelText(String text) {
        TextView textView = (TextView) getChildAt(getChildCount() - 1);
        textView.setText(text);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int modeWidth = MeasureSpec.getMode(widthMeasureSpec);
        int modeHeight = MeasureSpec.getMode(heightMeasureSpec);
        int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);
        int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);

        if (modeWidth == MeasureSpec.AT_MOST) {
            sizeWidth = circleRadius * 6 + horizontalInterval * 2 + getPaddingLeft() + getPaddingRight();
        }

        if (modeHeight == MeasureSpec.AT_MOST) {
            sizeHeight = circleRadius * 10 + 4 * verticalInterval + getPaddingTop() + getPaddingBottom();
        }
        setMeasuredDimension(sizeWidth,sizeHeight);
        for (int i = 0; i < getChildCount() ; i++) {
            getChildAt(i).measure(circleRadius * 2,circleRadius * 2);
        }
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        int row = 0;
        int col = 0;
        for (int i = 0; i < getChildCount() ; i++) {
            row = i / 3;
            col = i % 3;
            int left = getPaddingLeft() + col * 2 * circleRadius + horizontalInterval * col;
            int top = getPaddingTop() + row * 2 * circleRadius + verticalInterval * row;
            int right = left + 2 * circleRadius;
            int bottom = top + 2 * circleRadius;
            getChildAt(i).layout(left,top,right,bottom);
        }
    }

    private int dp2px(Context context ,float dp) {
        DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
        float density = displayMetrics.density;
        return (int)(density * dp + 0.5);
    }

    @Override
    public void onClick(View v) {
        TextView textView = (TextView) v;
        String num = textView.getText().toString();
        if (onNumberPressListener != null) {
            onNumberPressListener.onPress(num);
        }
    }

    public interface OnNumberPressListener {
        void onPress(String number);
    }
    private OnNumberPressListener onNumberPressListener;
    public void setOnNumberPressListener(OnNumberPressListener listener) {
        onNumberPressListener = listener;
    }
}

teview布局文件

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:textColor="#ffeeeeee"
    android:textSize="24sp"
    android:gravity="center"
    android:clickable="true"
    android:background="@drawable/selector_digital_bg"
    android:layout_width="match_parent" android:layout_height="match_parent">

</TextView>

使用方式

<com.shunwan.cloudphone.view.DigitalUnlockView
                android:id="@+id/duv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="167dp"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

设置监听
digitalUnlockView.setOnNumberPressListener(this);自己可以自定义属性改变相关属性,指示点可以配合另一篇博客稍微改造即可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值