zoukankan      html  css  js  c++  java
  • 创建手势密码

    设置手势密码,看大神弄的,我自己也跟着学了一遍,还是不太懂,但依然分享给大家

    大家看代码吧!

    1、mainactivity:

     1 package com.wangy.wiperswitch;
     2 
     3 import android.app.Instrumentation;
     4 import android.content.Intent;
     5 import android.content.SharedPreferences;
     6 import android.support.v7.app.AppCompatActivity;
     7 import android.os.Bundle;
     8 import android.view.View;
     9 import android.widget.Button;
    10 import android.widget.Toast;
    11 
    12 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    13 
    14     private Button btn_gesture;
    15     private String password;
    16 
    17     @Override
    18     protected void onCreate(Bundle savedInstanceState) {
    19         super.onCreate(savedInstanceState);
    20         setContentView(R.layout.activity_main);
    21         init();
    22     }
    23     private  void init(){
    24         btn_gesture = (Button)findViewById(R.id.btn_gesture);
    25         btn_gesture.setOnClickListener(MainActivity.this);
    26 
    27     }
    28 
    29     @Override
    30     public void onClick(View v) {
    31         switch (v.getId()){
    32             case R.id.btn_gesture:{
    33                 Intent intent=new Intent(MainActivity.this,GestureSetingActivity.class);
    34                 startActivityForResult(intent,RESULT_OK);
    35 //                finish();
    36                 break;
    37             }
    38         }
    39     }
    40 
    41     @Override
    42     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    43         super.onActivityResult(requestCode, resultCode, data);
    44         if (requestCode==RESULT_OK){
    45             if (data!=null){
    46                 Bundle bundle = data.getExtras();
    47                 if (bundle!=null){
    48                     Boolean isOk=bundle.getBoolean("isOk");
    49                     if (isOk){
    50                         password = bundle.getString("password");
    51                     }else {
    52                         Toast.makeText(MainActivity.this,"您两次输入的手势密码不相同,设置失败!",Toast.LENGTH_SHORT).show();
    53                     }
    54                 }
    55             }
    56         }
    57     }
    58 }

    mainactivi布局:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5    >
     6     <RelativeLayout
     7         android:layout_width="match_parent"
     8         android:layout_height="70dp"
     9         android:background="#ffffff"
    10         android:layout_marginTop="10dp">
    11 
    12         <Button
    13             android:id="@+id/btn_gesture"
    14             android:layout_width="wrap_content"
    15             android:layout_height="wrap_content"
    16             android:layout_centerVertical="true"
    17             android:layout_marginLeft="15dp"
    18             android:text="设置手势密码"
    19             android:textColor="#333333"
    20             android:textSize="16sp" />
    21 
    22     </RelativeLayout>
    23 
    24 </RelativeLayout>

    2点击进入设置密码界面GestureSetingActivity

     1 package com.wangy.wiperswitch;
     2 
     3 import android.content.Context;
     4 import android.content.Intent;
     5 import android.gesture.Gesture;
     6 import android.graphics.Bitmap;
     7 import android.graphics.BitmapFactory;
     8 import android.graphics.Canvas;
     9 import android.graphics.Matrix;
    10 import android.graphics.Paint;
    11 import android.os.Bundle;
    12 import android.os.PersistableBundle;
    13 import android.support.v4.app.Fragment;
    14 import android.support.v7.app.AppCompatActivity;
    15 import android.util.AttributeSet;
    16 import android.view.Display;
    17 import android.view.MotionEvent;
    18 import android.view.View;
    19 import android.view.WindowManager;
    20 import android.widget.FrameLayout;
    21 import android.widget.Toast;
    22 
    23 import com.wangy.wiperswitch.Custom.Drawl;
    24 import com.wangy.wiperswitch.Custom.GestureView;
    25 import com.wangy.wiperswitch.R;
    26 import com.wangy.wiperswitch.utils.SharepreferenceUtil;
    27 
    28 /**
    29  * Created by xhb on 2016/9/13.
    30  */
    31 public class GestureSetingActivity extends AppCompatActivity {
    32 
    33     private FrameLayout boby_layout;
    34     private String pass;
    35     private GestureView content;
    36     private int time=0;
    37 
    38     @Override
    39     protected void onCreate(Bundle savedInstanceState) {
    40         super.onCreate(savedInstanceState);
    41         setContentView(R.layout.gesture_setting_layout);
    42         init();
    43     }
    44     protected void init(){
    45         pass = "";
    46         boby_layout = (FrameLayout)findViewById(R.id.body_layout);
    47         WindowManager m = getWindowManager();
    48         Display d = m.getDefaultDisplay();
    49         content = new GestureView(this, pass, d.getWidth(), new Drawl.GestureCallBack() {
    50             @Override
    51             public void checkedSuccess(String s) {
    52                 if (s.length()<3){
    53                     Toast.makeText(GestureSetingActivity.this,"手势密码最少是3个!",Toast.LENGTH_SHORT).show();
    54                 }else {
    55                     if (time==0){
    56                         Toast.makeText(GestureSetingActivity.this,"请再输入一次!",Toast.LENGTH_SHORT).show();
    57                         time++;
    58                         pass=s;//将第一次输入的密码与第二次输入的密码比较是否一致
    59                          }else {
    60                         if (pass.equals(s)){
    61                             Toast.makeText(GestureSetingActivity.this,"设置成功!手势密码为:"+s,Toast.LENGTH_SHORT).show();
    62                             Bundle bundle = new Bundle();
    63                             bundle.putBoolean("isOk",true);
    64                             bundle.putString("password", s);
    65                             Intent intent = new Intent();
    66                             intent.putExtras(bundle);
    67                             setResult(RESULT_OK, intent);
    68                             SharepreferenceUtil.setstring(GestureSetingActivity.this,"pass",s);
    69                             finish();
    70                         }else {
    71                             Bundle bundle = new Bundle();
    72                             bundle.putBoolean("isOk", false);
    73                             Intent intent = new Intent();
    74                             intent.putExtras(bundle);
    75                             setResult(RESULT_OK, intent);
    76                             finish();
    77                         }
    78                     }
    79                 }
    80             }
    81 
    82             @Override
    83             public void checkedFail() {
    84                 Toast.makeText(GestureSetingActivity.this,"校验失败!",Toast.LENGTH_SHORT).show();
    85             }
    86         });
    87 
    88         //设置手势解锁显示到哪个布局里面
    89         content.setParentView(boby_layout);
    90     }
    91 }

    GestureSetingActivity布局

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:background="@drawable/gesture_bg">
     6 
     7     <FrameLayout
     8         android:id="@+id/body_layout"
     9         android:layout_centerInParent="true"
    10         android:layout_width="match_parent"
    11         android:layout_height="wrap_content"
    12         android:layout_marginTop="100dp"
    13         >
    14     </FrameLayout>
    15 </LinearLayout>

    3、2中设计到了一个非常重要的自定义控件GestureView,这是手势密码特别重要的view,接下来看代码吧!

      1 package com.wangy.wiperswitch.Custom;
      2 
      3 import android.content.Context;
      4 import android.view.View;
      5 import android.view.ViewGroup;
      6 import android.widget.ImageView;
      7 
      8 import com.wangy.wiperswitch.R;
      9 import com.wangy.wiperswitch.utils.ScreenUtils;
     10 
     11 import java.util.ArrayList;
     12 import java.util.List;
     13 
     14 /**
     15  * Created by xhb on 2016/9/14.
     16  */
     17 public class GestureView extends ViewGroup{
     18 
     19     private int baseNum = 6;
     20 
     21     private int[] screenDispaly;
     22 
     23     private int d;
     24     /**
     25      * 声明一个集合用来封装坐标集合
     26      */
     27     private List<Point> list;
     28     private Context context;
     29     private Drawl drawl;
     30 
     31     /**
     32      * 包含9个ImageView的容器,初始化
     33      * @param context
     34      * @param passWord 用户传入密码
     35      * @param callBack 手势绘制完毕的回调
     36      */
     37     public GestureView(Context context, String passWord, float width, Drawl.GestureCallBack callBack) {
     38         super(context);
     39         screenDispaly = ScreenUtils.getScreenDispaly(context);
     40         d = screenDispaly[0]/3;
     41         this.list = new ArrayList<Point>();
     42         this.context = context;
     43         // 添加9个图标
     44         addChild();
     45         // 初始化一个可以画线的view
     46         drawl = new Drawl(context, list,passWord,width,callBack);
     47     }
     48 
     49     private void addChild(){
     50         for (int i = 0; i < 9; i++) {
     51             ImageView image = new ImageView(context);
     52             image.setBackgroundResource(R.drawable.lock_pattern_node_normal);
     53             this.addView(image);
     54 
     55             // 第几行
     56             int row = i / 3;
     57             // 第几列
     58             int col = i % 3;
     59 
     60             // 定义点的每个属性
     61             int leftX = col*d+d/baseNum;
     62             int topY = row*d+d/baseNum;
     63             int rightX = col*d+d-d/baseNum;
     64             int bottomY = row*d+d-d/baseNum;
     65 
     66             Point p = new Point(leftX, rightX, topY, bottomY, image,i+1);
     67 
     68             this.list.add(p);
     69         }
     70     }
     71 
     72 
     73     public void setParentView(ViewGroup parent){
     74         // 得到屏幕的宽度
     75         int width = screenDispaly[0];
     76         LayoutParams layoutParams = new LayoutParams(width, width);
     77 
     78         this.setLayoutParams(layoutParams);
     79         drawl.setLayoutParams(layoutParams);
     80 
     81         parent.addView(drawl);
     82         parent.addView(this);
     83 
     84     }
     85 
     86 
     87     @Override
     88     protected void onLayout(boolean changed, int l, int t, int r, int b) {
     89         for (int i = 0; i < getChildCount(); i++) {
     90             //第几行
     91             int row = i/3;
     92             //第几列
     93             int col = i%3;
     94             View v = getChildAt(i);
     95             v.layout(col*d+d/baseNum, row*d+d/baseNum+50, col*d+d-d/baseNum, row*d+d-d/baseNum+50);
     96         }
     97     }
     98 
     99     @Override
    100     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    101         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    102         for (int i = 0; i < getChildCount(); i++) {
    103             View v = getChildAt(i);
    104             v.measure(widthMeasureSpec, heightMeasureSpec);
    105         }
    106     }
    107 
    108 }

    这里面也有个非常重要的Drawl(用来初始化一个可以画线的view),还有自定义笔Point

    Drawl:

      1 package com.wangy.wiperswitch.Custom;
      2 
      3 /**
      4  * Created by xhb on 2016/9/14.
      5  */
      6 
      7 import android.content.Context;
      8 import android.graphics.Bitmap;
      9 import android.graphics.Canvas;
     10 import android.graphics.Color;
     11 import android.graphics.Paint;
     12 import android.graphics.PorterDuff;
     13 import android.util.Pair;
     14 import android.view.MotionEvent;
     15 import android.view.View;
     16 
     17 import java.util.ArrayList;
     18 import java.util.List;
     19 
     20 import android.content.Context;
     21 import android.graphics.Bitmap;
     22 import android.graphics.Canvas;
     23 import android.graphics.Color;
     24 import android.graphics.Paint;
     25 import android.graphics.Paint.Style;
     26 import android.graphics.PorterDuff;
     27 import android.util.Pair;
     28 import android.view.MotionEvent;
     29 import android.view.View;
     30 
     31 import com.wangy.wiperswitch.utils.StringUtils;
     32 
     33 import java.util.ArrayList;
     34 import java.util.List;
     35 
     36 
     37 /**
     38  *
     39  * @author wangy
     40  *
     41  */
     42 public  class Drawl extends View {
     43     private int mov_x;// 声明起点坐标
     44     private int mov_y;
     45     private Paint paint;// 声明画笔
     46     private Canvas canvas;// 画布
     47     private Bitmap bitmap;// 位图
     48 
     49     private List<Point> list;// 装有各个view坐标的集合
     50     private List<Pair<Point, Point>> lineList;// 记录画过的线
     51 
     52     /**
     53      * 手指当前在哪个Point内
     54      */
     55     private Point currentPoint;
     56     /**
     57      * 用户绘图的回调
     58      */
     59     private GestureCallBack callBack;
     60 
     61     /**
     62      * 用户当前绘制的图形密码
     63      */
     64     private StringBuilder passWordSb;
     65 
     66     /**
     67      * 用户传入的passWord
     68      */
     69     private String passWord;
     70 
     71     public Drawl(Context context, List<Point> list, String passWord, float width, GestureCallBack callBack) {
     72         super(context);
     73         paint = new Paint(Paint.DITHER_FLAG);// 创建一个画笔
     74         bitmap = Bitmap.createBitmap((int)width, 800, Bitmap.Config.ARGB_8888); // 设置位图的宽高
     75         canvas = new Canvas();
     76         canvas.setBitmap(bitmap);
     77 
     78         paint.setStyle(Paint.Style.STROKE);// 设置非填充
     79         paint.setStrokeWidth(10);// 笔宽5像素
     80         paint.setColor(Color.parseColor("#ffffff"));// 设置颜色
     81         paint.setAntiAlias(true);// 不显示锯齿
     82 
     83         this.list = list;
     84         this.lineList = new ArrayList<Pair<Point, Point>>();
     85         this.callBack = callBack;
     86 
     87         //初始化密码缓存
     88         this.passWordSb = new StringBuilder();
     89         this.passWord = passWord;
     90     }
     91 
     92     // 画位图
     93     @Override
     94     protected void onDraw(Canvas canvas) {
     95         // super.onDraw(canvas);
     96         canvas.drawBitmap(bitmap, 0, 0, null);
     97     }
     98 
     99     // 触摸事件
    100     @Override
    101     public boolean onTouchEvent(MotionEvent event) {
    102         switch (event.getAction()) {
    103             case MotionEvent.ACTION_DOWN:
    104 
    105                 mov_x = (int) event.getX();
    106                 mov_y = (int) event.getY();
    107 
    108                 // 判断当前点击的位置是处于哪个点之内
    109                 currentPoint = getPointAt(mov_x, mov_y);
    110                 if (currentPoint != null) {
    111                     currentPoint.setHighLighted(true);
    112                     passWordSb.append(currentPoint.getNum());
    113                 }
    114                 // canvas.drawPoint(mov_x, mov_y, paint);// 画点
    115                 invalidate();
    116                 break;
    117             case MotionEvent.ACTION_MOVE:
    118                 clearScreenAndDrawList();
    119 
    120                 // 得到当前移动位置是处于哪个点内
    121                 Point pointAt = getPointAt((int) event.getX(), (int) event.getY());
    122                 //代表当前用户手指处于点与点之前
    123                 if(currentPoint==null && pointAt == null){
    124                     return true;
    125                 }else{//代表用户的手指移动到了点上
    126                     if(currentPoint == null){//先判断当前的point是不是为null
    127                         //如果为空,那么把手指移动到的点赋值给currentPoint
    128                         currentPoint = pointAt;
    129                         //把currentPoint这个点设置选中为true;
    130                         currentPoint.setHighLighted(true);
    131                         passWordSb.append(currentPoint.getNum());
    132                     }
    133                 }
    134 
    135                 if (pointAt == null || currentPoint.equals(pointAt)
    136                         || pointAt.isHighLighted()) {
    137                     // 点击移动区域不在圆的区域 或者
    138                     // 如果当前点击的点与当前移动到的点的位置相同
    139                     // 那么以当前的点中心为起点,以手指移动位置为终点画线
    140                     canvas.drawLine(currentPoint.getCenterX(),
    141                             currentPoint.getCenterY()+50, event.getX(), event.getY()+50,
    142                             paint);// 画线
    143                 } else {
    144                     // 如果当前点击的点与当前移动到的点的位置不同
    145                     // 那么以前前点的中心为起点,以手移动到的点的位置画线
    146                     canvas.drawLine(currentPoint.getCenterX(),
    147                             currentPoint.getCenterY()+50, pointAt.getCenterX(),
    148                             pointAt.getCenterY()+50, paint);// 画线
    149 
    150                     pointAt.setHighLighted(true);
    151 
    152                     Pair<Point, Point> pair = new Pair<Point, Point>(currentPoint,
    153                             pointAt);
    154                     lineList.add(pair);
    155 
    156                     // 赋值当前的point;
    157                     currentPoint = pointAt;
    158                     passWordSb.append(currentPoint.getNum());
    159                 }
    160                 invalidate();
    161                 break;
    162             case MotionEvent.ACTION_UP:// 当手指抬起的时候
    163                 // 清掉屏幕上所有的线,只画上集合里面保存的线
    164                 if(StringUtils.isEmpty(passWord)){
    165                     callBack.checkedSuccess(passWordSb.toString());
    166                 }else{
    167                     if(passWord.equals(passWordSb.toString())){
    168                         //代表用户绘制的密码手势与传入的密码相同
    169                         callBack.checkedSuccess(passWordSb.toString());
    170                     }else{
    171                         //用户绘制的密码与传入的密码不同。
    172                         callBack.checkedFail();
    173                     }
    174                 }
    175 
    176                 //重置passWordSb
    177                 passWordSb = new StringBuilder();
    178                 //清空保存点的集合
    179                 lineList.clear();
    180                 //重新绘制界面
    181                 clearScreenAndDrawList();
    182                 for (Point p : list) {
    183                     p.setHighLighted(false);
    184                 }
    185                 invalidate();
    186                 break;
    187             default:
    188                 break;
    189         }
    190         return true;
    191     }
    192 
    193     /**
    194      * 通过点的位置去集合里面查找这个点是包含在哪个Point里面的
    195      *
    196      * @param x
    197      * @param y
    198      * @return 如果没有找到,则返回null,代表用户当前移动的地方属于点与点之间
    199      */
    200     private Point getPointAt(int x, int y) {
    201 
    202         for (Point point : list) {
    203             // 先判断x
    204             int leftX = point.getLeftX();
    205             int rightX = point.getRightX();
    206             if (!(x >= leftX && x < rightX)) {
    207                 // 如果为假,则跳到下一个对比
    208                 continue;
    209             }
    210 
    211             int topY = point.getTopY();
    212             int bottomY = point.getBottomY();
    213             if (!(y >= topY && y < bottomY)) {
    214                 // 如果为假,则跳到下一个对比
    215                 continue;
    216             }
    217 
    218             // 如果执行到这,那么说明当前点击的点的位置在遍历到点的位置这个地方
    219             return point;
    220         }
    221 
    222         return null;
    223     }
    224 
    225     /**
    226      * 清掉屏幕上所有的线,然后画出集合里面的线
    227      */
    228     private void clearScreenAndDrawList() {
    229         canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
    230         for (Pair<Point, Point> pair : lineList) {
    231             canvas.drawLine(pair.first.getCenterX(), pair.first.getCenterY()+50,
    232                     pair.second.getCenterX(), pair.second.getCenterY()+50, paint);// 画线
    233         }
    234     }
    235 
    236     public interface GestureCallBack{
    237 
    238         /**
    239          * 代表用户绘制的密码与传入的密码相同
    240          */
    241         void checkedSuccess(String s);
    242         /**
    243          * 代表用户绘制的密码与传入的密码不相同
    244          */
    245         void checkedFail();
    246     }
    247 
    248 }

    Point

      1 package com.wangy.wiperswitch.Custom;
      2 
      3 import android.widget.ImageView;
      4 
      5 import com.wangy.wiperswitch.R;
      6 
      7 /**
      8  * Created by xhb on 2016/9/14.
      9  */
     10     public class Point {
     11         /**
     12          * 左边x的值
     13          */
     14         private int leftX;
     15         /**
     16          * 右边x的值
     17          */
     18         private int rightX;
     19         /**
     20          * 上边y的值
     21          */
     22         private int topY;
     23         /**
     24          * 下边y的值
     25          */
     26         private int bottomY;
     27         /**
     28          * 这个点对应的ImageView控件
     29          */
     30         private ImageView image;
     31 
     32         /**
     33          * 中心x值
     34          */
     35         private int centerX;
     36 
     37         /**
     38          * 中心y值
     39          */
     40         private int centerY;
     41 
     42         /**
     43          * 是否是高亮(划过)
     44          */
     45         private boolean highLighted;
     46 
     47         /**
     48          * 代表这个Point对象代表的数字,从1开始(直接感觉从1开始)
     49          */
     50         private int num;
     51 
     52         public Point(int leftX, int rightX, int topY, int bottomY, ImageView image, int num) {
     53             super();
     54             this.leftX = leftX;
     55             this.rightX = rightX;
     56             this.topY = topY;
     57             this.bottomY = bottomY;
     58             this.image = image;
     59 
     60             this.centerX = (leftX + rightX) / 2;
     61             this.centerY = (topY + bottomY) / 2;
     62 
     63             this.num = num;
     64         }
     65 
     66         public int getLeftX() {
     67             return leftX;
     68         }
     69 
     70         public void setLeftX(int leftX) {
     71             this.leftX = leftX;
     72         }
     73 
     74         public int getRightX() {
     75             return rightX;
     76         }
     77 
     78         public void setRightX(int rightX) {
     79             this.rightX = rightX;
     80         }
     81 
     82         public int getTopY() {
     83             return topY;
     84         }
     85 
     86         public void setTopY(int topY) {
     87             this.topY = topY;
     88         }
     89 
     90         public int getBottomY() {
     91             return bottomY;
     92         }
     93 
     94         public void setBottomY(int bottomY) {
     95             this.bottomY = bottomY;
     96         }
     97 
     98         public ImageView getImage() {
     99             return image;
    100         }
    101 
    102         public void setImage(ImageView image) {
    103             this.image = image;
    104         }
    105 
    106         public int getCenterX() {
    107             return centerX;
    108         }
    109 
    110         public void setCenterX(int centerX) {
    111             this.centerX = centerX;
    112         }
    113 
    114         public int getCenterY() {
    115             return centerY;
    116         }
    117 
    118         public void setCenterY(int centerY) {
    119             this.centerY = centerY;
    120         }
    121 
    122         public boolean isHighLighted() {
    123             return highLighted;
    124         }
    125 
    126         public void setHighLighted(boolean highLighted) {
    127             this.highLighted = highLighted;
    128             if (highLighted) {
    129                 this.image.setBackgroundResource(R.drawable.lock_pattern_node_pressed);
    130             } else {
    131                 this.image.setBackgroundResource(R.drawable.lock_pattern_node_normal);
    132             }
    133         }
    134 
    135         public int getNum() {
    136             return num;
    137         }
    138 
    139         public void setNum(int num) {
    140             this.num = num;
    141         }
    142 
    143         @Override
    144         public int hashCode() {
    145             final int prime = 31;
    146             int result = 1;
    147             result = prime * result + bottomY;
    148             result = prime * result + ((image == null) ? 0 : image.hashCode());
    149             result = prime * result + leftX;
    150             result = prime * result + rightX;
    151             result = prime * result + topY;
    152             return result;
    153         }
    154 
    155         @Override
    156         public boolean equals(Object obj) {
    157             if (this == obj)
    158                 return true;
    159             if (obj == null)
    160                 return false;
    161             if (getClass() != obj.getClass())
    162                 return false;
    163             Point other = (Point) obj;
    164             if (bottomY != other.bottomY)
    165                 return false;
    166             if (image == null) {
    167                 if (other.image != null)
    168                     return false;
    169             } else if (!image.equals(other.image))
    170                 return false;
    171             if (leftX != other.leftX)
    172                 return false;
    173             if (rightX != other.rightX)
    174                 return false;
    175             return topY == other.topY;
    176         }
    177 
    178         @Override
    179         public String toString() {
    180             return "Point [leftX=" + leftX + ", rightX=" + rightX + ", topY="
    181                     + topY + ", bottomY=" + bottomY + "]";
    182         }
    183     }

    4、这就完成了,不过其中需要用到一些工具类我都奉上啦!

    ScreenUtils:获取手机屏幕的高度和宽度
     1 public class ScreenUtils {
     2     @SuppressWarnings("deprecation")
     3     public static int[] getScreenDispaly(Context context){
     4         WindowManager wm=(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
     5         int width=wm.getDefaultDisplay().getWidth();//手机屏幕的宽度
     6         int height=wm.getDefaultDisplay().getHeight();//手机屏幕的高度
     7         int result[] = {width,height};
     8         return result;
     9 
    10     }
    11 }
    SharepreferenceUtil:本地记录密码,一般用于登录
     1 package com.wangy.wiperswitch.utils;
     2 
     3 import android.content.Context;
     4 import android.content.SharedPreferences;
     5 
     6 /**
     7  * Created by xhb on 2016/9/18.
     8  */
     9 public class SharepreferenceUtil {
    10         private static final String   name="cogi";
    11         public static  boolean getboolean(Context con,String key,boolean defaultValues){
    12             SharedPreferences sp=con.getSharedPreferences(name
    13                     ,Context.MODE_PRIVATE);
    14             return sp.getBoolean(key, defaultValues);
    15         }
    16 
    17         public static void putboolean(Context con,String key,boolean values){
    18             SharedPreferences sp=con.getSharedPreferences(name,Context.MODE_PRIVATE);
    19             sp.edit().putBoolean(key, values).commit();
    20         }
    21 
    22         public static  String getstring(Context con,String key,String defaultValues){
    23             SharedPreferences sp=con.getSharedPreferences(name
    24                     ,Context.MODE_PRIVATE);
    25             return sp.getString(key, defaultValues);
    26         }
    27 
    28         public static void setstring(Context con,String key,String values){
    29             SharedPreferences sp=con.getSharedPreferences(name,Context.MODE_PRIVATE);
    30             sp.edit().putString(key, values).commit();
    31         }
    32     }
    StringUtils:字符串常用的
     1 public class StringUtils {
     2         public StringUtils() {
     3         }
     4 
     5         public static boolean isEmpty(String str) {
     6             return str == null || str.length() == 0;
     7         }
     8 
     9         public static boolean equals(String str1, String str2) {
    10             return str1 == null?str2 == null:str1.equals(str2);
    11         }
    12 
    13         public static boolean equalsIgnoreCase(String str1, String str2) {
    14             return str1 == null?str2 == null:str1.equalsIgnoreCase(str2);
    15         }
    16 
    17         public static boolean gbk(String str) {
    18             int count = 0;
    19             String regEx = "[\u4e00-\u9fa5]";
    20             Pattern p = Pattern.compile(regEx);
    21             Matcher m = p.matcher(str);
    22 
    23             while(m.find()) {
    24                 for(int i = 0; i <= m.groupCount(); ++i) {
    25                     ++count;
    26                 }
    27             }
    28 
    29             if(count > 0) {
    30                 return true;
    31             } else {
    32                 return false;
    33             }
    34         }
    35     

    图片也打包送上了背景图就不放了,随大家了

    看看效果图吧!

  • 相关阅读:
    bootstrap-table 数据表格行内修改
    java文件上传(单文件 多文件)与删除
    bootstrap-table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)
    bootstrap-table 大量字段整体表单上传之时间处理
    Java实习问题记录
    Playbook剧本初识
    自动化运维工具-Ansible基础
    性能优化概述
    Rewrite基本概述
    Nginx常见问题
  • 原文地址:https://www.cnblogs.com/wangying222/p/6030389.html
Copyright © 2011-2022 走看看