锁屏 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; } }