android仿支付寶密碼輸入框效果
本文實(shí)例為大家分享了android仿支付寶密碼輸入框展示的具體代碼,供大家參考,具體內(nèi)容如下
這個(gè)沒(méi)什么好分析的,就是一些基本的繪制什么線,矩形什么的,看代碼更具體
布局文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <com.example.custompasswordview.PasswordView android:id="@+id/passwordview" android:layout_width="match_parent" android:layout_height="105px" android:layout_marginTop="100px" android:layout_marginLeft="20px" android:layout_marginRight="20px" android:inputType="number" android:cursorVisible="false" android:focusable="true" android:focusableInTouchMode="true" android:enabled="true" android:clickable="true" /> <Button android:id="@+id/btn_pass_reset" android:layout_width="250px" android:layout_height="90px" android:text="重置" android:layout_below="@id/passwordview" android:layout_marginTop="20px" android:layout_marginLeft="40px" android:gravity="center" /> </RelativeLayout>
MainActivity.java
package com.example.custompasswordview;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
private Button btn_pass_reset;
private PasswordView passwordview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_pass_reset = (Button) findViewById(R.id.btn_pass_reset);
passwordview = (PasswordView) findViewById(R.id.passwordview);
btn_pass_reset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
passwordview.setEmpeyText();
}
});
}
}
自定義EditText輸入框
package com.example.custompasswordview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.EditText;
import android.widget.Toast;
/**
* Created by Adminis on 2016/8/7.
*/
public class PasswordView extends EditText {
private static final String TAG ="PasswordView" ;
private Paint bordPaint;//外框畫(huà)筆
private Paint linePaint;//線 的畫(huà)筆
private Paint passTextPaint;//密碼畫(huà)筆
private int width;
private int height;
private int passwordLength = 6;//代碼的長(zhǎng)度
private int textLength;
private int radius = 15;
public PasswordView(Context context) {
this(context,null);
}
public PasswordView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public PasswordView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initPaint();
}
/**
* 初始化畫(huà)筆
*/
private void initPaint() {
setFocusable(true);
bordPaint = new Paint();
bordPaint.setStrokeWidth(8);
bordPaint.setColor(Color.WHITE);
bordPaint.setStyle(Paint.Style.FILL);
linePaint = new Paint();
linePaint.setColor(Color.parseColor("#838B8B"));
linePaint.setStrokeWidth(4);
passTextPaint = new Paint();
passTextPaint.setColor(Color.parseColor("#000000"));
passTextPaint.setStrokeWidth(12);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
height = getMeasuredHeight();
width = getMeasuredWidth();
drawRoundRect(canvas);
drawLine(canvas);
drawTextPass(canvas);
}
/**
* 繪制密碼
* @param canvas
*/
private void drawTextPass(Canvas canvas) {
float cx, cy = height/ 2;
float half = width / passwordLength / 2;
for(int i = 0; i < textLength; i++) {
cx = width * i / passwordLength + half;
canvas.drawCircle(cx, cy, radius, passTextPaint);
}
}
/**
* 繪制線
* @param canvas
*/
private void drawLine(Canvas canvas) {
for (int i = 1; i < passwordLength; i++) {
float x = width * i / passwordLength;
canvas.drawLine(x, 12, x, height-12, linePaint);
}
}
/**
* 繪制背景
* @param canvas
*/
private void drawRoundRect(Canvas canvas) {
canvas.drawRoundRect(0,0,width,height,12,12,bordPaint);
}
@Override
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
super.onTextChanged(text, start, lengthBefore, lengthAfter);
this.textLength = text.toString().length();
if(textLength==6){
Toast.makeText(getContext(),"您設(shè)置的密碼為"+text,Toast.LENGTH_SHORT).show();
}
invalidate();
}
public void setEmpeyText(){
setText("");
invalidate();
}
}
效果:

github:https://github.com/zhouguizhi/ZhiFuBaoPwdView
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android使用TextInputLayout創(chuàng)建登陸頁(yè)面
- Android實(shí)現(xiàn)動(dòng)態(tài)顯示或隱藏密碼輸入框的內(nèi)容
- Android文本輸入框(EditText)輸入密碼時(shí)顯示與隱藏
- Android軟鍵盤(pán)擋住輸入框的終極解決方案
- Android UI設(shè)計(jì)系列之自定義EditText實(shí)現(xiàn)帶清除功能的輸入框(3)
- Android 仿支付寶密碼輸入框效果
- android仿微信支付寶的支付密碼輸入框示例
- android輸入框與文本框加滾動(dòng)條scrollview示例
- Android輸入法彈出時(shí)覆蓋輸入框問(wèn)題的解決方法
- android仿支付寶、微信密碼輸入框效果
- TextInputLayout輸入框控件的懸浮標(biāo)簽
相關(guān)文章
Android實(shí)戰(zhàn)教程第八篇之短信備份
這篇文章主要為大家詳細(xì)介紹了Android實(shí)戰(zhàn)教程第八篇之短信備份的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android?Jetpack庫(kù)剖析之ViewModel組件篇
這篇文章主要介紹了Android?Jetpack架構(gòu)組件?ViewModel詳解,ViewModel類(lèi)讓數(shù)據(jù)可在發(fā)生屏幕旋轉(zhuǎn)等配置更改后繼續(xù)存在,ViewModel類(lèi)旨在以注重生命周期的方式存儲(chǔ)和管理界面相關(guān)的數(shù)據(jù)。感興趣可以來(lái)學(xué)習(xí)一下2022-07-07
Android源碼學(xué)習(xí)之單例模式應(yīng)用及優(yōu)點(diǎn)介紹
動(dòng)態(tài)確保某一個(gè)類(lèi)只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例這就是Android單例模式應(yīng)用,接下來(lái)詳細(xì)介紹,有需求的朋友可以參考下2013-01-01
利用Jetpack?Compose復(fù)刻游戲Flappy?Bird
Flappy?Bird是13年紅極一時(shí)的小游戲,其簡(jiǎn)單有趣的玩法和變態(tài)的難度形成了強(qiáng)烈反差,引發(fā)全球玩家競(jìng)相把玩!本文將通過(guò)Jetpack?Compose復(fù)刻這一游戲,感興趣的小伙伴可以了解一下2022-02-02
Android獲取手機(jī)位置的實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Android獲取手機(jī)位置的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android實(shí)現(xiàn)歡迎滑動(dòng)頁(yè)面
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)歡迎滑動(dòng)頁(yè)面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
Android手機(jī)開(kāi)發(fā) 使用線性布局和相對(duì)布局實(shí)現(xiàn)Button垂直水平居中
本文主要結(jié)合自己的理解分別對(duì)使用LinearLayout和RelativeLayout兩種方式實(shí)現(xiàn)居中做了總結(jié),希望對(duì)大家有所幫助。2016-05-05
Android基于AccessibilityService制作的釘釘自動(dòng)簽到程序代碼
這篇文章主要介紹了Android基于AccessibilityService制作的釘釘自動(dòng)簽到程序代碼,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Android性能優(yōu)化之JVMTI與內(nèi)存分配
這篇文章主要為大家介紹了Android性能優(yōu)化之JVMTI與內(nèi)存分配,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10

