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(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。