小米水墨锁屏代码

效果图:


Ink_LockActivity.java

package com.aiai.www;

import android.app.Activity;
import android.app.KeyguardManager;
import android.app.KeyguardManager.KeyguardLock;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;

public class Ink_LockActivity extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		startService(new Intent(this, Ink_LockScreenService.class));
		EnableSystemKeyguard(false);
	}

	void EnableSystemKeyguard(boolean bEnable) {
		
		KeyguardManager mKeyguardManager = null;
		KeyguardLock mKeyguardLock = null;

		mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
		mKeyguardLock = mKeyguardManager.newKeyguardLock("");

		if (bEnable)
			mKeyguardLock.reenableKeyguard();
		else
			mKeyguardLock.disableKeyguard();
	}
}



 Ink_LockScreenActivity.java

package com.aiai.www;

import com.aiai.www.Ink_LockScreenView.OnCompleteListener;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class Ink_LockScreenActivity extends Activity {
	private Ink_LockScreenView mInkView;
	private final String ACT_TIME_TICK = "android.intent.action.TIME_TICK";

	@Override
	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		this.requestWindowFeature(Window.FEATURE_NO_TITLE);

		// this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
		// WindowManager.LayoutParams.FLAG_FULLSCREEN);

		System.out.println("Ink_LockScreenActivity  onCreate");

//		Ink_LockScreenView.istime24_flag = istime24();

		mInkView = new Ink_LockScreenView(this);
		//mInkView.setParentActivity(this);		
		setContentView(mInkView);
		
		
		mInkView.setOnCompleteListener(new OnCompleteListener()
		{
			@Override
			public void onComplete()
			{				 
				Ink_LockScreenActivity.this.finish();
				
				
/*				Intent mIntent = new Intent( ); 
			    ComponentName comp = new ComponentName("com.android.mms", "类名");     
			     mIntent.setComponent(comp); 
				 mIntent.setAction("android.intent.action.VIEW"); 
				 startActivity(mIntent);*/
			}

			@Override
			public void onEnterContact() {
				// TODO Auto-generated method stub
				Ink_LockScreenActivity.this.finish();
				Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
				startActivity(intent);
			}

			@Override
			public void onEnterMms() {
				// TODO Auto-generated method stub
				Ink_LockScreenActivity.this.finish();
				Intent intent = new Intent();
				intent = getPackageManager().getLaunchIntentForPackage("com.android.mms");				
				startActivity(intent);
			}
		});
		

	}

	
	
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		System.out.println("*************lockscreenviewactivity*********onKeyDown keyCode:"+keyCode);
		return true;
		//super.onKeyDown(keyCode, event);
	}



 


	@Override
	public void onAttachedToWindow() {
		// TODO Auto-generated method stub
		//禁用home按键
		 this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
		super.onAttachedToWindow();
	}



	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		
		IntentFilter intentFilter = new IntentFilter(ACT_TIME_TICK);
		registerReceiver(mTimeUpdateBCR, intentFilter);
	}



	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		
		unregisterReceiver(mTimeUpdateBCR);
	}



	private BroadcastReceiver mTimeUpdateBCR = new BroadcastReceiver() {

		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub 
 
			System.out.println("time update in activity act:"+intent.getAction());
			
			if(intent.getAction().equals(ACT_TIME_TICK))
			{
				mInkView.invalidate();
				//mUpdateTimeListener.updateTime();
	
			}

			 
			

		}
	};
/*	private boolean istime24() {
		ContentResolver cv = this.getContentResolver();
		String strTimeFormat = android.provider.Settings.System.getString(cv,
				android.provider.Settings.System.TIME_12_24);

		if (strTimeFormat.equals("24"))
			return true;
		else
			return false;

	}*/

}



Ink_LockScreenService.java

package com.aiai.www;

import java.util.List;

 

import android.app.ActivityManager;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.util.Log;

public class Ink_LockScreenService extends Service {
	private final String ACT_SCREEN_OFF = "android.intent.action.SCREEN_OFF";
	//private final String ACT_SCREEN_ON = "android.intent.action.SCREEN_ON";
	//private final String ACT_TIME_TICK = "android.intent.action.TIME_TICK";

	

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
 
		return null;
	}

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();

		// register Broadcast
	 
		IntentFilter intentFilter = new IntentFilter(ACT_SCREEN_OFF);
		registerReceiver(mScreenBCR, intentFilter);
		
/*		IntentFilter intentFilter2 = new IntentFilter(ACT_TIME_TICK);
		registerReceiver(mScreenBCR, intentFilter2);*/
	}

	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();

		unregisterReceiver(mScreenBCR);
	}

	private BroadcastReceiver mScreenBCR = new BroadcastReceiver() {

		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub 
			System.out.println("onReceive  receive intent:"+intent);
			System.out.println("act:"+intent.getAction());
			
			if(intent.getAction().equals(ACT_SCREEN_OFF))
			{				
				System.out.println("aa");
				try {
					Intent i = new Intent();
					i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
					i.setClass(context, Ink_LockScreenActivity.class);
					context.startActivity(i);
				} catch (Exception e) {
					// TODO: handle exception
				 
				}
			}
			//else if(intent.getAction().equals(ACT_TIME_TICK))
			{
				System.out.println("bb");
				//mUpdateTimeListener.updateTime();
	
			}

			 
			

		}
	};

/*	private UpdateTimeListener mUpdateTimeListener;
	public interface UpdateTimeListener
	{
			
		public void updateTime();
 
	}*/

}


Ink_LockScreenView.java

package com.aiai.www;

import java.util.Calendar;
import java.util.Date;

 



import android.app.Activity;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;

public class Ink_LockScreenView extends View  {

	private Bitmap Ink_bg, Ink_bar;
	private Bitmap Ink_time0, Ink_time1, Ink_time2, Ink_time3, Ink_time4,
			       Ink_time5, Ink_time6, Ink_time7, Ink_time8, Ink_time9, Ink_timedot;
	private int hour=0;
	private int minute=0;
//	public static boolean istime24_flag=false;
	
    public Canvas  mCanvas;
	private Paint mPaint;
	private int INK_BG_X = 0;
	private int INK_BG_Y = -20;
	private int INK_BAR_X = 0;	
	private int INK_BAR_Y = 290;
	private int INK_BAR_TOUCH_AREA_Y1 = 340;
	private int INK_BAR_TOUCH_AREA_Y2 = 420;
	private int INK_BAR_UNLOCK_Y = 448;
	private int INK_TIME_X = 80;
	private int INK_TIME_Y = 360;
	private int INK_UNLOCK_AREA_X1 = 80;
	private int INK_UNLOCK_AREA_X2 = 254;
	
	private boolean isInited = false;
	
    enum BarState {
    	STATE_NORMAL,
    	STATE_PRESS,
    	STATE_MOVE,
    	STATE_UNLOCK,
 
    	}
	
    private BarState mBarState = BarState.STATE_NORMAL;
    private float moveX = 0,moveY=0;
    private float premoveX = 0,premoveY=0;
    private float tmpX = 0,tmpY=0;
    private float movedX = 0,movedY=0;
	Activity mParentActivity;



	public Ink_LockScreenView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
    	Ink_bg = BitmapFactory.decodeResource(this.getResources(), R.drawable.ink_bg);
		Ink_bar = BitmapFactory.decodeResource(this.getResources(), R.drawable.ink_bar);
		Ink_time0 = BitmapFactory.decodeResource(this.getResources(), R.drawable.ink_time_0);
		Ink_time1 = BitmapFactory.decodeResource(this.getResources(), R.drawable.ink_time_1);
		Ink_time2 = BitmapFactory.decodeResource(this.getResources(), R.drawable.ink_time_2);
		Ink_time3 = BitmapFactory.decodeResource(this.getResources(), R.drawable.ink_time_3);
		Ink_time4 = BitmapFactory.decodeResource(this.getResources(), R.drawable.ink_time_4);
		Ink_time5 = BitmapFactory.decodeResource(this.getResources(), R.drawable.ink_time_5);
		Ink_time6 = BitmapFactory.decodeResource(this.getResources(), R.drawable.ink_time_6);
		Ink_time7 = BitmapFactory.decodeResource(this.getResources(), R.drawable.ink_time_7);
		Ink_time8 = BitmapFactory.decodeResource(this.getResources(), R.drawable.ink_time_8);
		Ink_time9 = BitmapFactory.decodeResource(this.getResources(), R.drawable.ink_time_9);
		Ink_timedot = BitmapFactory.decodeResource(this.getResources(), R.drawable.ink_time_dot);
		mPaint = new Paint();
 
        /*mCanvas = new Canvas(Ink_bg);*/
       
	}

	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		super.onDraw(canvas);	

		System.out.println("onDraw isInited:"+isInited);
		
		if(!isInited)
		{
			initDraw(canvas);
		}
		else
		{
		// draw background
		//canvas.drawColor(Color.BLUE);
		//canvas.drawBitmap(Ink_bg, INK_BG_X, INK_BG_Y, mPaint);
			if(mBarState == BarState.STATE_MOVE)
			{
				canvas.drawBitmap(Ink_bg, INK_BG_X, INK_BG_Y, mPaint);
				canvas.drawBitmap(Ink_bar, INK_BAR_X, INK_BAR_Y+movedY, mPaint);
				timeDraw(canvas);
			}
			else //if(mBarState == BarState.STATE_NORMAL)
			{
				canvas.drawBitmap(Ink_bg, INK_BG_X, INK_BG_Y, mPaint);
				canvas.drawBitmap(Ink_bar, INK_BAR_X, INK_BAR_Y, mPaint);
				timeinitDraw(canvas);
			}
		}
	

	}

	private void initDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		canvas.drawBitmap(Ink_bg, INK_BG_X, INK_BG_Y, mPaint);
		canvas.drawBitmap(Ink_bar, INK_BAR_X, INK_BAR_Y, mPaint);
		timeinitDraw(canvas);
		isInited = true;
	}

	
	private void timeGet() {
		Calendar c = Calendar.getInstance();
		 hour = c.get(Calendar.HOUR_OF_DAY);
		 minute = c.get(Calendar.MINUTE);
		 System.out.println("hour:"+hour+",minute:"+minute);
	}
	


	private void timeDraw(Canvas canvas) {
		timeGet();
		
		int tmpWidth=0;
		Bitmap[] timearr={Ink_time0,Ink_time1,Ink_time2,Ink_time3,Ink_time4,Ink_time5,Ink_time6,Ink_time7,Ink_time8,Ink_time9}; 
		
		 System.out.println("timeDraw");

		 int tmphour1 = hour/10;
		 int tmphour2 = hour%10;		 
		 int tmpmin1 = minute/10;
		 int tmpmin2 = minute%10;
		 
		
		 //draw hour
		canvas.drawBitmap(timearr[tmphour1], INK_TIME_X, INK_TIME_Y+movedY, mPaint);
		tmpWidth = timearr[tmphour1].getWidth();		
		canvas.drawBitmap(timearr[tmphour2], INK_TIME_X+tmpWidth, INK_TIME_Y+movedY, mPaint);
		tmpWidth += timearr[tmphour2].getWidth();	
		
		//draw dot
		canvas.drawBitmap(Ink_timedot, INK_TIME_X+tmpWidth, INK_TIME_Y+movedY, mPaint);
		tmpWidth += timearr[tmphour2].getWidth();	
		
		//draw minute
		canvas.drawBitmap(timearr[tmpmin1], INK_TIME_X+tmpWidth, INK_TIME_Y+movedY, mPaint);
		tmpWidth += timearr[tmpmin1].getWidth();		
		canvas.drawBitmap(timearr[tmpmin2], INK_TIME_X+tmpWidth, INK_TIME_Y+movedY, mPaint);
		//tmpWidth = timearr[tmphour2].getWidth();	
		
	
 
	}
	
	private void timeinitDraw(Canvas canvas) {
		timeGet();
		
		int tmpWidth=0;
		Bitmap[] timearr={Ink_time0,Ink_time1,Ink_time2,Ink_time3,Ink_time4,Ink_time5,Ink_time6,Ink_time7,Ink_time8,Ink_time9}; 
		
		 System.out.println("timeDraw");

		 int tmphour1 = hour/10;
		 int tmphour2 = hour%10;		 
		 int tmpmin1 = minute/10;
		 int tmpmin2 = minute%10;
		 
		
		 //draw hour
		canvas.drawBitmap(timearr[tmphour1], INK_TIME_X, INK_TIME_Y, mPaint);
		tmpWidth = timearr[tmphour1].getWidth();		
		canvas.drawBitmap(timearr[tmphour2], INK_TIME_X+tmpWidth, INK_TIME_Y, mPaint);
		tmpWidth += timearr[tmphour2].getWidth();	
		
		//draw dot
		canvas.drawBitmap(Ink_timedot, INK_TIME_X+tmpWidth, INK_TIME_Y, mPaint);
		tmpWidth += timearr[tmphour2].getWidth();	
		
		//draw minute
		canvas.drawBitmap(timearr[tmpmin1], INK_TIME_X+tmpWidth, INK_TIME_Y, mPaint);
		tmpWidth += timearr[tmpmin1].getWidth();		
		canvas.drawBitmap(timearr[tmpmin2], INK_TIME_X+tmpWidth, INK_TIME_Y, mPaint);
		//tmpWidth = timearr[tmphour2].getWidth();	
		
	
/*		if(istime24_flag)
		{
			
		}
		else
		{
			
		}*/
	}
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		System.out.println("*************lockscreenview*********onKeyDown keyCode:"+keyCode);
		return super.onKeyDown(keyCode, event);
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		System.out.println("onTouchEvent");
		
		float ex = event.getX();
		float ey = event.getY();
		System.out.println("onTouchEvent ex="+ex+",ey="+ey);
		
		moveX = ex;
		moveY = ey;
		
  		switch (event.getAction())
		{
		case MotionEvent.ACTION_DOWN: 
			System.out.println("onTouchEvent ACTION_DOWN"); 
			
			if(ey>=INK_BAR_TOUCH_AREA_Y1 && ey<=INK_BAR_TOUCH_AREA_Y2)
				mBarState = BarState.STATE_PRESS;
			
			break;
			
		case MotionEvent.ACTION_MOVE:
			System.out.println("onTouchEvent ACTION_MOVE");
			
			if (ey >= INK_BAR_TOUCH_AREA_Y1 
					&& movedY >= 0)
			{				
				tmpX = moveX - premoveX;
				tmpY = moveY - premoveY;
				movedX = movedX + tmpX;
				movedY = movedY + tmpY;
			}
		 
			if(ey>=INK_BAR_TOUCH_AREA_Y1
					&& movedY > 0)
			{	
				mBarState = BarState.STATE_MOVE;
			}
			else
			{
				mBarState = BarState.STATE_NORMAL;
			}
			break;
			
		case MotionEvent.ACTION_UP:
			movedX = 0;
			movedY = 0;
			premoveX = 0;
			premoveY = 0;
			
			if(ey>= INK_BAR_UNLOCK_Y)
			{
				mBarState = BarState.STATE_UNLOCK;
				
				if (ex<INK_UNLOCK_AREA_X1
						&& ex>0)
				{
					mCompleteListener.onEnterContact();		
				}
				else if(ex<INK_UNLOCK_AREA_X2
						&& ex>INK_UNLOCK_AREA_X1)
				{
					mCompleteListener.onComplete();
				}
				else
				{
					mCompleteListener.onEnterMms();
				}
				//mParentActivity.finish();
		/*		Intent mIntent = new Intent( ); 
			    ComponentName comp = new ComponentName("包名", "类名");     
			     mIntent.setComponent(comp); 
				 mIntent.setAction("android.intent.action.VIEW"); 
				 startActivity(mIntent);*/
				return true;
				
			}
			else
			{
				mBarState = BarState.STATE_NORMAL;
			}
			
			System.out.println("onTouchEvent ACTION_UP");
			break;
				
		}

		premoveX = ex;
		premoveY = ey;	
		
		this.postInvalidate();
		 super.onTouchEvent(event);
		 return true;
	}

/*	public void setParentActivity(Activity parentAct) {
		// TODO Auto-generated method stub
		
		mParentActivity = parentAct;
	}*/

	
	private OnCompleteListener mCompleteListener;
	public void setOnCompleteListener(OnCompleteListener mCompleteListener)
	{
		
		this.mCompleteListener = mCompleteListener;
	}
	
	public interface OnCompleteListener
	{
			
		public void onComplete();
		public void onEnterContact();
		public void onEnterMms();
	}

 
	
	

	
	
}



androidmanifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.aiai.www"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" >
    </uses-permission>
    <uses-permission android:name="android.permission.WAKE_LOCK" >
    </uses-permission>
    <uses-permission android:name="android.permission.GET_TASKS" >
    </uses-permission>

    <uses-sdk android:minSdkVersion="10" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".Ink_LockActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service android:name=".Ink_LockScreenService" >
            <intent-filter>
                <action android:name="android.intent.action.SCREEN_OFF" />
              <!--   <action android:name="android.intent.action.TIME_TICK" /> -->
            </intent-filter>
        </service>

        <activity android:name=".Ink_LockScreenActivity" >
            <intent-filter>
                <action android:name="android.intent.action.TIME_TICK" />
            </intent-filter>
        </activity>
    </application>

</manifest>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值