Android仿苹果关机界面实现代码
本文实例为大家分享了Android仿苹果关机界面的具体代码,供大家参考,具体内容如下
主class用来控制viewdialog的显示
packagecom.android.server.policy;
importandroid.app.AlertDialog;
importandroid.app.StatusBarManager;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.os.RemoteException;
importandroid.os.ServiceManager;
importandroid.os.SystemClock;
importandroid.util.Log;
importandroid.view.IWindowManager;
importandroid.view.KeyEvent;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.Window;
importandroid.view.WindowManager;
importandroid.view.animation.Animation;
importandroid.view.animation.TranslateAnimation;
importandroid.widget.Button;
importandroid.widget.LinearLayout;
importandroid.content.BroadcastReceiver;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.content.IntentFilter;
//importandroid.widget.SlideBar;
importcom.android.internal.R;
importandroid.widget.ImageView;
importandroid.view.MotionEvent;
importandroid.view.View.OnTouchListener;
importandroid.util.Log;
importandroid.widget.FrameLayout;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Paint;
importandroid.graphics.Path;
importandroid.graphics.RectF;
importandroid.graphics.Bitmap;
importandroid.graphics.PixelFormat;
importandroid.graphics.drawable.Drawable;
importandroid.util.AttributeSet;
importandroid.graphics.drawable.BitmapDrawable;
importandroid.view.Display;
importandroid.view.WindowManager;
//importcom.android.internal.widget.SlideView;
//importandroid.view.WindowManagerPolicy.WindowManagerFuncs;
importandroid.view.WindowManagerPolicy.WindowManagerFuncs;
importandroid.view.Gravity;
importandroid.app.WallpaperManager;
importandroid.graphics.Bitmap.Config;
importandroid.graphics.drawable.BitmapDrawable;
//addedbywangchengjuforshutdown
publicclassIphoneShutdownDialog{
privatestaticStringTAG="IphoneShutdownDialog";
privateintmStyleId;
privatebooleanmIsRestore=false;
privateViewview;
privateStatusBarManagermStatusBar;
privateContextmContext;
privatefinalWindowManagerFuncsmWindowManagerFuncs;//addedbywangchengjuforshutdown
privatestaticfinalintMESSAGE_DISMISS=0;
staticfinalStringSYSTEM_DIALOG_REASON_KEY="reason";
staticfinalStringSYSTEM_DIALOG_REASON_GLOBAL_ACTIONS="globalactions";
intmdownx,mdowny;
booleanispowerdown=false;
privateWallpaperManagerwpm;
privateFrameLayoutmgradientView;
privateWindowManagermWindowManager;
privateWindowManager.LayoutParamsmFrameLayoutParams;
privateFrameLayoutmFrameLayout;
publicIphoneShutdownDialog(Contextcontext,WindowManagerFuncswindowManagerFuncs)
{
Log.d(TAG,"denghaiguiconstruction");
mContext=context;
mWindowManagerFuncs=windowManagerFuncs;//addedbywangchengjuforshutdown
mStatusBar=(StatusBarManager)mContext.getSystemService(Context.STATUS_BAR_SERVICE);
IntentFilterfilter=newIntentFilter();
filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_WALLPAPER_CHANGED);
context.registerReceiver(mBroadcastReceiver,filter);
wpm=(WallpaperManager)mContext.getSystemService(mContext.WALLPAPER_SERVICE);
}
publicBitmapdrawableToBitmap(Drawabledrawable){
Bitmapbitmap=Bitmap.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity()!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888
:Bitmap.Config.RGB_565);
Canvascanvas=newCanvas(bitmap);
//canvas.setBitmap(bitmap);
drawable.setBounds(0,0,drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight());
drawable.draw(canvas);
returnbitmap;
}
/*publicDrawablegetBitmapDrawable(Viewviews){
WindowManagerwindowManager=(WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
Displaydisplay=windowManager.getDefaultDisplay();
intw=display.getWidth();
inth=display.getHeight();
BitmapBmp=Bitmap.createBitmap(w,h,Config.ARGB_8888);
Viewdecorview=views.getWindow().getDecorView();
decorview.setDrawingCacheEnabled(true);
Bmp=decorview.getDrawingCache();
Drawabledrawable=newBitmapDrawable(Bmp);
returndrawable;
}*/
privatevoidinitWindowsView(){
if(mWindowManager==null)
mWindowManager=(WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
mFrameLayoutParams=newWindowManager.LayoutParams(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
mFrameLayoutParams.type=WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;//
mFrameLayoutParams.format=PixelFormat.RGBA_8888;
resetWindowParamsFlags();
mFrameLayoutParams.gravity=Gravity.TOP|Gravity.START;
mFrameLayout=newFrameLayout(mContext);
mFrameLayout.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
|View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
mWindowManager.addView(mFrameLayout,mFrameLayoutParams);
}
privatevoidresetWindowParamsFlags(){
mFrameLayoutParams.flags=WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
|WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
|WindowManager.LayoutParams.FLAG_FULLSCREEN
|WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
|WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
|WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
}
privatevoidremoveView(){
mFrameLayout.removeAllViews();
mWindowManager.removeViewImmediate(mFrameLayout);
view=null;
mFrameLayout=null;
mWindowManager=null;
}
publicvoidshowDialog(booleankeyguardShowing)
{
Log.d("PhoneShutdownDialog","denghaiguishowDialog");
initWindowsView();
//createDialog
if(view==null){
LayoutInflaterinflater=LayoutInflater.from(mContext);
view=inflater.inflate(R.layout.iphone_shutdown_dialog,null,false);
mFrameLayout.addView(view);
Bitmapimage=drawableToBitmap(wpm.getDrawable());
image=Blur.fastblur(mContext,image,25);
BitmapDrawablebt=newBitmapDrawable(image);
Blur.setDrawable(bt);
}else{
Log.d("PhoneShutdownDialog","denghaiguiviewisnotnull");
}
Drawablebt=Blur.getDrawable();
if(bt!=null){
view.setBackground(bt);
}
mgradientView=(FrameLayout)view.findViewById(R.id.gradientView_layout);
FrameLayoutslide_shutdown=(FrameLayout)view.findViewById(R.id.slide_layout);
SlideViewmslideview=newSlideView(mContext);
android.widget.FrameLayout.LayoutParamslayoutparams=newandroid.widget.FrameLayout.LayoutParams(524,150,Gravity.CENTER);
slide_shutdown.addView(mslideview,0,layoutparams);
finalLinearLayoutcancelShutdown=(LinearLayout)view.findViewById(R.id.cancelShutdown);
ButtoncancelShutdownBtn=(Button)view.findViewById(R.id.cancelShutdownBtn);
cancelShutdownBtn.setPressed(false);
cancelShutdownBtn.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(Viewv){
removeView();
//playCloseAnimation(shutdownTab,cancelShutdown);
}
});
//playopenanimation
//playOpenAnimation(shutdownTab,cancelShutdown);
mStatusBar.disable(StatusBarManager.DISABLE_EXPAND);
}
publicvoiddismissDialog()
{
removeView();
mStatusBar.disable(StatusBarManager.DISABLE_NONE);
}
privateBroadcastReceivermBroadcastReceiver=newBroadcastReceiver(){
publicvoidonReceive(Contextcontext,Intentintent){
Stringaction=intent.getAction();
if(Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)
||Intent.ACTION_SCREEN_OFF.equals(action)){
Stringreason=intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
if(!SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS.equals(reason)){
mHandler.sendEmptyMessage(MESSAGE_DISMISS);
}
}
if(action.equals(Intent.ACTION_WALLPAPER_CHANGED)){
Bitmapimage=drawableToBitmap(wpm.getDrawable());
image=Blur.fastblur(context,image,25);
BitmapDrawablebt=newBitmapDrawable(image);
Blur.setDrawable(bt);
}
}
};
privateHandlermHandler=newHandler(){
publicvoidhandleMessage(Messagemsg){
if(msg.what==MESSAGE_DISMISS){
if(view!=null){
dismissDialog();
}
}
}
};
publicclassSlideViewextendsView
{
publicfloatmTouchX;
privateDrawablemSlideDrawable;
publicfloatmDownX,mdx;
privatebooleanisPower=false;
privateContextmContext;
publicSlideView(Contextcontext,AttributeSetattrs){
this(context);
}
publicSlideView(Contextcontext){
super(context);
mContext=context;
mSlideDrawable=context.getResources().getDrawable(R.drawable.slide_touch_icon);
}
@Override
protectedvoidonDraw(Canvascanvas){
super.onDraw(canvas);
if(mdx>374)mdx=374;
if(mdx<0)mdx=0;
PaintmPaint=newPaint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(Color.WHITE);
mPaint.setAlpha(200);
canvas.save();
Pathpath=newPath();
RectFrect=newRectF(mdx,0,434,120);
canvas.drawRoundRect(rect,72,72,mPaint);
canvas.restore();
canvas.drawBitmap(((BitmapDrawable)mSlideDrawable).getBitmap(),mdx+5,5,null);
}
@Override
publicbooleanonTouchEvent(MotionEventev){
intaction=ev.getAction();
switch(action){
caseMotionEvent.ACTION_DOWN:
mDownX=ev.getX();
isPower=true;
//mgradientView.setVisibility(8);
break;
caseMotionEvent.ACTION_MOVE:
mgradientView.setVisibility(8);
mTouchX=ev.getX();
if(mTouchX<=mDownX)
{
mdx=0;
mgradientView.setVisibility(0);
}
else
mdx=(mTouchX-mDownX);
invalidate();
if(mdx>374)
isPower=false;
else
isPower=true;
break;
caseMotionEvent.ACTION_UP:
caseMotionEvent.ACTION_CANCEL:
if(isPower==true){
mgradientView.setVisibility(0);
mdx=0;
invalidate();
}
else
mWindowManagerFuncs.shutdown(false);
break;
}
returntrue;
}
}
}
GradientPowerView.java用来做滑块和写入滑块中的文字显示
packagecom.android.server.policy;
importandroid.animation.ValueAnimator;
importandroid.animation.ValueAnimator.AnimatorUpdateListener;
importandroid.content.Context;
importandroid.content.res.TypedArray;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.LinearGradient;
importandroid.graphics.Paint;
importandroid.graphics.Shader;
importandroid.graphics.drawable.BitmapDrawable;
importandroid.graphics.drawable.Drawable;
importandroid.util.AttributeSet;
importandroid.util.Log;
importandroid.view.View;
importandroid.view.animation.Animation;
importcom.android.internal.R;
importandroid.graphics.Typeface;
publicclassGradientPowerViewextendsView{
privatestaticfinalStringTAG="GradientPowerView";
privatestaticfinalbooleanDEBUG=false;
privatefloatmIndex=0;
privateShadermShader;
privateintmTextSize;
privatestaticfinalintmUpdateStep=15;
privatestaticfinalintmMaxWidth=40*mUpdateStep;//26*25
privatestaticfinalintmMinWidth=6*mUpdateStep;//5*25
intmDefaultColor;
intmSlideColor;
privateValueAnimatoranimator;
privateintmWidth,mHeight;
privateStringmStringToShow;
privatePaintmTextPaint;
privatefloatmTextHeight;
privateDrawablemSlideIcon;
privateintmSlideIconHeight;
privatestaticfinalintmSlideIconOffSetTop=20;
privatestaticfinalStringANDROID_CLOCK_FONT_FILE="/system/fonts/ASans.ttf";
privateAnimatorUpdateListenermAnimatorUpdateListener=newAnimatorUpdateListener(){
@Override
publicvoidonAnimationUpdate(ValueAnimatoranimation){
mIndex=Float.parseFloat(animation.getAnimatedValue().toString());
//RadialGradientSweepGradient
mShader=newLinearGradient(mIndex-20*mUpdateStep,100,
mIndex,100,newint[]{mDefaultColor,mDefaultColor,mDefaultColor,mSlideColor,
mSlideColor,mDefaultColor,mDefaultColor,mDefaultColor},null,
Shader.TileMode.CLAMP);
postInvalidate();
}
};
publicGradientPowerView(Contextcontext){
super(context);
}
publicGradientPowerView(Contextcontext,AttributeSetattrs){
super(context,attrs);
TypedArraya=context.obtainStyledAttributes(attrs,R.styleable.GradientView);
mStringToShow=a.getString(R.styleable.GradientView_text);
mTextSize=(int)a.getDimension(R.styleable.GradientView_textSize,40);
mDefaultColor=a.getColor(R.styleable.GradientView_textColor,Color.GRAY);
mSlideColor=a.getColor(R.styleable.GradientView_SlideColor,Color.WHITE);
mSlideIcon=context.getResources().getDrawable(R.drawable.slide_icon);
mSlideIconHeight=mSlideIcon.getMinimumHeight();
a.recycle();
animator=ValueAnimator.ofFloat(mMinWidth,mMaxWidth);
animator.setDuration(1800);
animator.addUpdateListener(mAnimatorUpdateListener);
animator.setRepeatCount(Animation.INFINITE);//repeatanimation
animator.start();
mTextPaint=newPaint();
mTextPaint.setAntiAlias(true);
mTextPaint.setColor(mSlideColor);
mTextPaint.setTextSize(mTextSize);
mTextPaint.setTextAlign(Paint.Align.CENTER);
//mTextPaint.setTypeface(Typeface.createFromFile(ANDROID_CLOCK_FONT_FILE));
mTextHeight=mTextPaint.ascent();
setFocusable(true);
}
@Override
protectedvoidonDraw(Canvascanvas){
if(DEBUG)
Log.w(TAG,"bonDraw()");
mTextPaint.setShader(mShader);
Log.i("denghaigui","mWidthis:"+mWidth+"Heightis:"+mHeight+"mTextHeight:"+mTextHeight);
canvas.drawText(mStringToShow,(mWidth+30)/2,mHeight/2-mTextHeight
/2-mSlideIconOffSetTop,mTextPaint);//slide_unlock
}
publicvoidstopAnimatorAndChangeColor(){
//if(DEBUG)
Log.w(TAG,"stopGradient");
animator.cancel();
//reset
mShader=newLinearGradient(0,100,mIndex,100,
newint[]{mSlideColor,mSlideColor},
null,Shader.TileMode.CLAMP);
invalidate();
}
publicvoidstartAnimator(){
if(DEBUG)
Log.w(TAG,"startGradient");
animator.start();
}
@Override
protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
mWidth=MeasureSpec.getSize(widthMeasureSpec);
mHeight=MeasureSpec.getSize(heightMeasureSpec);
}
publicvoidresetControl(){
animator.start();
this.setX(0);
invalidate();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。