先上一张图,因为这个效果该叫什么我也不知道。
锁屏应用在解锁的时候,跟随手指的滑动,显示Launcher或者其他应用的内容,起初并未直接在Keyguard上直接修改,而是做了一个Demo,实现效果后再加入到Keyguard中的。
先来说说怎么实现这个Demo的,然后再来讲怎么应用到Keyguard中去。
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RadialGradient;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.FrameLayout;
public class FrameView extends FrameLayout{
private static final String TAG = "FrameView";
private boolean isMoving = false;
private Bitmap frontBitmap = null;
private Drawable mBackground = null;
private Paint mPaint = null;
private float radius;
private float centerX;
private float centerY;
private float bubbleX;
private float bubbleY;
private Canvas mCanvas;
private Drawable mUnLockDrawable;
private List<Bubble> bubbles = new ArrayList<Bubble>();
private Random random = new Random();//生成随机数
private int width, height;
public FrameView(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public FrameView(Context context) {
super(context);
}
public FrameView(Context context, AttributeSet attrs) {
super(context, attrs);
}
private void init(){
//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 = new Paint();
radius = 100f;
mCanvas = new Canvas();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float ax = event.getX();
float ay = event.getY();
int ac = event.getAction();
switch(ac){
case MotionEvent.ACTION_DOWN: