先上一张图,因为这个效果该叫什么我也不知道。
锁屏应用在解锁的时候,跟随手指的滑动,显示Launcher或者其他应用的内容,起初并未直接在Keyguard上直接修改,而是做了一个Demo,实现效果后再加入到Keyguard中的。
先来说说怎么实现这个Demo的,然后再来讲怎么应用到Keyguard中去。
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Random;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.LinearGradient;
importandroid.graphics.Paint;
importandroid.graphics.PorterDuff;
importandroid.graphics.PorterDuffXfermode;
importandroid.graphics.RadialGradient;
importandroid.graphics.Shader;
importandroid.graphics.drawable.BitmapDrawable;
importandroid.graphics.drawable.Drawable;
importandroid.util.AttributeSet;
importandroid.util.Log;
importandroid.view.MotionEvent;
importandroid.widget.FrameLayout;
publicclassFrameViewextendsFrameLayout{
privatestaticfinalStringTAG="FrameView";
privatebooleanisMoving=false;
privateBitmapfrontBitmap=null;
privateDrawablemBackground=null;
privatePaintmPaint=null;
privatefloatradius;
privatefloatcenterX;
privatefloatcenterY;
privatefloatbubbleX;
privatefloatbubbleY;
privateCanvasmCanvas;
privateDrawablemUnLockDrawable;
privateList<Bubble>bubbles=newArrayList<Bubble>();
privateRandomrandom=newRandom();//生成随机数
privateintwidth,height;
publicFrameView(Contextcontext,AttributeSetattrs,
intdefStyleAttr){
super(context,attrs,defStyleAttr);
}
publicFrameView(Contextcontext){
super(context);
}
publicFrameView(Contextcontext,AttributeSetattrs){
super(context,attrs);
}
privatevoidinit(){
//frontBitmap=CreateBitmap(Color.GRAY,getWidth(),getHeight());
mBackground=getResources().getDrawable(R.drawable.keyguard_bg);
frontBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.keyguard_bg);
//frontBitmap=Bitmap.createBitmap(frontBitmap,0,0,getWidth(),getHeight());
mUnLockDrawable=getResources().getDrawable(R.drawable.unlock_dewdrop);
mPaint=newPaint();
radius=100f;
mCanvas=newCanvas();
}
@Override
publicbooleanonTouchEvent(MotionEventevent){
floatax=event.getX();
floatay=event.getY();
intac=event.getAction();
switch(ac){
caseMotionEvent.ACTION_DOWN:
isMoving=false;
centerX=ax;
centerY=ay;
invalidate();
returntrue;
caseMotionEvent.ACTION_MOVE:
Log.d(TAG,"onTouchEvent————–ACTION_MOVE");
isMoving=true;
bubbleX=ax;
bubbleY=ay;
radius=(float)Math.sqrt((ax-centerX)*(ax-centerX)+(ay-centerY)*(ay-centerY));
invalidate();
returntrue;
caseMotionEvent.ACTION_UP:
isMoving=false;
bubbles.clear();
invalidate();
break;
}
returnsuper.onTouchEvent(event);
}
classBubbleThreadextendsThread{
@Override
publicvoidrun(){
while(true){
try{
Thread.sleep(random.nextInt(3)*300);
}catch(InterruptedExceptione){
e.printStackTrace();
}
Bubblebubble=newBubble();
intradius=random.nextInt(30);
while(radius==0){
radius=random.nextInt(30);
}
floatspeedY=random.nextFloat()*5;
while(speedY<1){
speedY=random.nextFloat()*5;
}
bubble.setRadius(radius);
bubble.setSpeedY(speedY);
bubble.setX(bubbleX);
bubble.setY(bubbleY);
floatspeedX=random.nextFloat()-0.5f;
while(speedX==0){
speedX=random.nextFloat()-0.5f;
}
bubble.setSpeedX(speedX*2);
bubbles.add(bubble);
}
}
}
@Override
protectedvoiddispatchDraw(Canvascanvas){
Log.d(TAG,"onTouchEvent————–dispatchDraw—->>>>>>>>>>");
生活中若没有朋友,就像生活中没有阳光一样