`
yzyspy
  • 浏览: 82060 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android画图-解锁界面

 
阅读更多

   锁屏   Launcher   输入法  应用程序开发

   ICS lockscreen :http://blog.chinaunix.net/uid-26153587-id-3202374.html

/*
 * Copyright (C) 2008 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.ExpandableListActivity;

import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.ColorStateList;
import android.database.ContentObserver;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.telephony.PhoneStateListener;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.text.format.DateFormat;
import android.view.GestureDetector.OnGestureListener;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.DisplayMetrics;
import android.util.Log;
import android.media.AudioManager;
import android.os.BatteryManager;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;

import java.util.Date;
import java.io.File;

/**
 * The screen within {@link LockPatternKeyguardView} that shows general
 * information about the device depending on its state, and how to get past it,
 * as applicable.
 */
class LockScreen extends LinearLayout implements View.OnTouchListener,
        OnGestureListener {

    private String TAG = "yzy";
    private float fingx;
    private float fingy;
    
    private float bigCircleX ;
    private float bigCircleY ;
    private float bigCircleR ;
    

    public LockScreen(Context context, float widthPixels) {
        super(context);
        setWillNotDraw(false);
        
        this.bigCircleX = widthPixels/2;
        this.bigCircleY = 500;
        this.bigCircleR = 200;
        this.setOnTouchListener(this);

    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Log.d("yzy", "ondraw.......");
        // 创建画笔
        Paint p = new Paint();
        p.setColor(Color.RED);// 设置红色
        p.setStyle(Style.STROKE);
        p.setAntiAlias(true);// 设置画笔的锯齿效果。 true是去除,大家一看效果就明白了
        canvas.drawCircle(fingx, fingy, 100, p);// 大圆
        
        p.setColor(Color.WHITE);// 设置红色
        canvas.drawCircle(bigCircleX, bigCircleY, bigCircleR, p);

    }

    public boolean dispatchTouchEvent(MotionEvent ev) {
        // 这里必须返回 super.dispatchTouchEvent(ev); 滑动得时候才会多次触发ACTION_MOVE
        return super.dispatchTouchEvent(ev);
        // return true;
        // return false;

    }

    public boolean onInterceptTouchEvent(MotionEvent ev) {

        super.onTouchEvent(ev);
        int action = ev.getAction();

        switch (action) {
            case MotionEvent.ACTION_MOVE:

                //现在代码没有走这里 而是走得下面得onToucEvent
                fingx = ev.getX();
                fingy = ev.getY() < 500 ? 500 : ev.getY();
                Log.d("yzy", "fingx =" + fingx);
                Log.d("yzy", "fingy =" + fingy);

                Log.d(TAG, "---onTouchEvent action:ACTION_MOVE");
                break;

            case MotionEvent.ACTION_DOWN:

                Log.d(TAG, "---onTouchEvent action:ACTION_DOWN");

                break;

            case MotionEvent.ACTION_UP:

                Log.d(TAG, "---onTouchEvent action:ACTION_UP");

                break;

            case MotionEvent.ACTION_CANCEL:
                Log.d(TAG, "---onTouchEvent action:ACTION_CANCEL");

                break;
        }

        return super.onInterceptTouchEvent(ev);

    }

    public boolean onTouchEvent(MotionEvent ev) {
        super.onTouchEvent(ev);
        int action = ev.getAction();

        switch (action) {
            case MotionEvent.ACTION_MOVE:
                fingx = ev.getX();
                fingy = ev.getY();
                if(getDistance(this.fingx,this.fingy,this.bigCircleX,this.bigCircleY)<=this.bigCircleR){
                    Log.d("yzy", "fingx =" + fingx);
                    Log.d("yzy", "fingy =" + fingy);
                    this.invalidate();
                }
                
               
                break;

            case MotionEvent.ACTION_DOWN:

                Log.d(TAG, "---onTouchEvent action:ACTION_DOWN");

                break;

            case MotionEvent.ACTION_UP:

                float x = ev.getX();
                float y = ev.getY();
                if(isTriggered(x,y)){
                    
                }else{
                    this.fingx = 240;this.fingy = 600;
                    this.invalidate();
                    
                }
                Log.d(TAG, "---onTouchEvent action:ACTION_UP");

                break;

            case MotionEvent.ACTION_CANCEL:
                Log.d(TAG, "---onTouchEvent action:ACTION_CANCEL");

                break;
        }

        return true;

    }

    private boolean isTriggered(float x, float y) {
        // TODO Auto-generated method stub
        return false;
    }

    private double getDistance(float fingx2, float fingy2, float bigCircleX2, float bigCircleY2) {
        double  x = StrictMath.pow(fingx2-bigCircleX2, 2) + StrictMath.pow(fingy2-bigCircleY2, 2);
        return StrictMath.pow(x, 0.5);
    }

    // --------------------------------------------------
    @Override
    public boolean onDown(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        // TODO Auto-generated method stub
        // fingx = ev.getX();
        // fingy = ev.getY();
        //this.invalidate();
        //Log.d(TAG, "---onTouchEvent action:ACTION_MOVE");
        return true;
    }

    @Override
    public void onShowPress(MotionEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }

    // --------------------------------------------------
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Log.d("yzy", "touch.........");
        // TODO Auto-generated method stub
        return false;
    }

}
分享到:
评论

相关推荐

    Android 图案解锁(九宫格解锁)源码.zip

    这需要在应用中设置一个错误计数器,并根据其值决定是否显示密码解锁界面。 - 图案复杂度:为了提高安全性,可以设置规则限制用户创建过于简单的图案,如最小连接点数或重复点的数量。 5. **源码分析**: - 在...

    安卓手势解锁源码-Demo源码

    开发者可以通过设置背景颜色、线条颜色、节点颜色等属性,调整解锁界面的视觉效果。此外,还可以调整节点大小、线条宽度,甚至可以添加动画效果,增强用户体验。 5. **数据存储与安全** 手势解锁图案需要安全地...

    Android项目开发范例大全.rar

    第4章 “SpinLock”——画图与替代解锁界面的尝试 第5章 “BlueControl”——蓝牙通信与感应器服务 第6章 “快速启动”——动态小浮窗 第7章 “手机终端”——手机自动服务和语音控制 第8章 “Let's race”——网络...

    Android项目开发范例大全 光盘代码 完整版

    第4章 “SpinLock”——画图与替代解锁界面的尝试 第5章 “BlueControl”——蓝牙通信与感应器服务 第6章 “快速启动”——动态小浮窗 第7章 “手机终端”——手机自动服务和语音控制 第8章 “Let's race”——...

    Android项目开发范例大全 9787113147945

    第4章“SpinLock”——画图与替代解锁界面的尝试 第5章“BlueControl”——蓝牙通信与感应器服务 第6章“快速启动”——动态小浮窗 第7章“手机终端”——手机自动服务和语音控制 第8章“Let'srace”——网络通信与...

    自定义手势解锁的控件,可直接使用

    总的来说,自定义手势解锁控件涉及到了Android开发中的多个关键领域,包括图形绘制、触摸事件处理、数据库操作以及用户交互设计。开发者需要对这些方面有深入的理解才能有效地利用这个控件,为用户提供安全且便捷的...

    重力曲线画图(传感器和画图)

    在IT行业中,尤其是在移动设备开发或者物联网应用领域,传感器技术和数据可视化是两个非常重要的概念。...通过这样的练习,开发者可以深入理解Android系统如何与硬件交互,以及如何利用图形界面有效地呈现动态数据。

    android美女找茬

    今天我们将深入探讨如何利用2D画图技术在Android平台上开发一款名为“美女找茬”的游戏。 首先,我们要理解2D画图在Android中的实现方式。Android提供了丰富的图形库,如Canvas和Bitmap,用于创建和绘制2D图形。...

    超级AI大脑基于Spring Boot架构,支持web,Android,IOS,H5多端应用,使用了OpenAI的ChatGPT

    超级AI大脑一个基于Spring Boot架构,支持web,Android,IOS,H5多端应用,使用了OpenAI的ChatGPT模型实现了智能聊天机器人。用户可以在界面上与聊天机器人进行对话,聊天机器人会根据用户的输入自动生成回复。同时...

    TeamViewMeeting

    - **3.2.2 通过QuickConnect按钮主持会议**:此功能允许用户通过一个简单的界面快速启动会议。 **3.3 加入会议** - **3.3.1 通过链接或Web浏览器加入会议**:组织者可以通过电子邮件或其他方式分享会议链接,参与...

Global site tag (gtag.js) - Google Analytics