溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android 動態、靜態壁紙實現

發布時間:2020-06-08 05:23:14 來源:網絡 閱讀:1320 作者:向往宇宙 欄目:移動開發

1、靜態壁紙
    1)獲取壁紙實例,實際上是一個服務提供
         WallpaperManager wallpaperManager=WallpaperManager.getInstance(this);
         WallpaperManager.getInstance()方法內容如下:
            public static WallpaperManager getInstance(Context context) {
            return (WallpaperManager)context.getSystemService(
                    Context.WALLPAPER_SERVICE);
         }
    2、使用下列三個方法之一設置壁紙內容
        wallpaperManager.setBitmap(bitmap)
        wallpaperManager.setStream(data);
        wallpaperManager.setResource(R.drawable.a);

2、動態壁紙
   1)、在res目錄下建xml目錄,并建一個xml文件,如aa.xml
       <?xml version="1.0" encoding="utf-8"?>
       <wallpaper
           xmlns:android="http://schemas.android.com/apk/res/android"
           android:thumbnail="@drawable/c"/>
   2)、寫一個類繼承WallpaperService類。并重寫 public Engine onCreateEngine()方法。
              該方法的返回值Engine即為繪制壁紙的方法。重寫該類中的方法,并不強制。
              
                當壁紙的顯示、狀態或大小變化是,會調用Engine的onCreate,
        onDestroy,onVisibilityChanged, onSurfaceChanged,
        onSurfaceCreated 和onSurfaceDestroyed方法。
        有了這些方法,動態壁紙才能展現出動畫效果。
        而通過設置setTouchEventsEnabled(true),
        并且調用onTouchEvent(MotionEvent event)方法,
        來激活觸摸事件。
   3)、在清單文件里面注冊該服務
          <!-- 配置實時壁紙Service -->  
        <service android:label="@string/app_name"  
            android:name="service類全名"  
            android:permission="android.permission.BIND_WALLPAPER">  
            <!-- 為實時壁紙配置intent-filter -->  
            <intent-filter>  
                <action  android:name="android.service.wallpaper.WallpaperService" />  
            </intent-filter>  
            <!-- 為實時壁紙配置meta-data -->  
            <meta-data android:name="android.service.wallpaper"  
                android:resource="@xml/xml文件夾下的xml文件" />  
         </service>
    4)、使用方法
                   長按屏幕選擇動態壁紙進行選擇。
                   
    5)、實例
            public class LiveGralley extends WallpaperService{
                // 實現WallpaperService必須實現的抽象方法  
                public Engine onCreateEngine()  
                {  
                    // 返回自定義的Engine  
                    return new MyEngine();  
                }  
              
                class MyEngine extends Engine  
                {  
                    // 記錄程序界面是否可見  
                    private boolean mVisible;  
                    // 記錄當前當前用戶動作事件的發生位置  
                    private float mTouchX = -1;  
                    private float mTouchY = -1;  
                    // 記錄當前圓圈的繪制位置  
                      
                    //左上角坐標  
                    private float cx1 = 15;  
                    private float cy1 = 20;  
                      
                    //右下角坐標  
                    private float cx2 = 300;  
                    private float cy2 = 380;  
                      
                    //右上角坐標  
                    private float cx3 = 300;  
                    private float cy3 = 20;  
                      
                    //左下角坐標  
                    private float cx4 = 15;  
                    private float cy4 = 380;  
                      
                    // 定義畫筆  
                    private Paint mPaint = new Paint();  
                    // 定義一個Handler  
                    Handler mHandler = new Handler();  
                    // 定義一個周期性執行的任務  
                    private final Runnable drawTarget = new Runnable()  
                    {  
                        public void run()  
                        {  
                            // 動態地繪制圖形  
                            drawFrame();  
                        }  
                    };  
              
                    @Override  
                    public void onCreate(SurfaceHolder surfaceHolder)  
                    {  
                        super.onCreate(surfaceHolder);  
                        // 初始化畫筆  
                        mPaint.setColor(0xffffffff);  
                        mPaint.setAntiAlias(true);  
                        mPaint.setStrokeWidth(2);  
                        mPaint.setStrokeCap(Paint.Cap.ROUND);  
                        mPaint.setStyle(Paint.Style.STROKE);  
                        // 設置處理觸摸事件  
                       //setTouchEventsEnabled(true);  
                    }  
              
                    @Override  
                    public void onDestroy()  
                    {  
                        super.onDestroy();  
                        // 刪除回調  
                        mHandler.removeCallbacks(drawTarget);  
                    }  
              
                    @Override  
                    public void onVisibilityChanged(boolean visible)  
                    {  
                        mVisible = visible;  
                        // 當界面可見時候,執行drawFrame()方法。  
                        if (visible)  
                        {  
                            // 動態地繪制圖形  
                            drawFrame();  
                        }  
                        else  
                        {  
                            // 如果界面不可見,刪除回調  
                            mHandler.removeCallbacks(drawTarget);  
                        }  
                    }  
              
                   /* public void onOffsetsChanged(float xOffset, float yOffset, float xStep,  
                        float yStep, int xPixels, int yPixels)  
                    {  
                        drawFrame();  
                    }*/  
              
              
                    /*public void onTouchEvent(MotionEvent event)  
                    {  
                        // 如果檢測到滑動操作  
                        if (event.getAction() == MotionEvent.ACTION_MOVE)  
                        {  
                            mTouchX = event.getX();  
                            mTouchY = event.getY();  
                        }  
                        else  
                        {  
                            mTouchX = -1;  
                            mTouchY = -1;  
                        }  
                        super.onTouchEvent(event);  
                    } */
              
                    private Integer[] mImageIds = {
                            R.drawable.a,   
                            R.drawable.b, R.drawable.c,   
                            R.drawable.d, R.drawable.e,   
                            R.drawable.f, R.drawable.g,   
                            R.drawable.h,
                    };
                    
                    // 定義繪制圖形的工具方法  
                    private void drawFrame()  
                    {  
                        // 獲取該壁紙的SurfaceHolder  
                        final SurfaceHolder holder = getSurfaceHolder();  
                        Canvas c = null;  
                        try  
                        {  
                            // 對畫布加鎖  
                            c = holder.lockCanvas();  
                            if (c != null)  
                            {  
                                c.save();  
                                // 繪制背景色  
                                int i = new Random().nextInt(8);
                                
                                Bitmap bitmap = BitmapFactory.decodeResource(getResources(), mImageIds[i]);
                                c.drawBitmap(bitmap, 0, 0, mPaint);
                                // 在觸碰點繪制圓圈  
                               // drawTouchPoint(c);  
                                  
                                // 繪制圓圈  
                                c.drawCircle(cx1, cy1, 80, mPaint);  
                                c.drawCircle(cx2, cy2, 40, mPaint);  
                                c.drawCircle(cx3, cy3, 50, mPaint);  
                                c.drawCircle(cx4, cy4, 60, mPaint);  
                                c.restore();  
                            }  
                        }  
                        finally  
                        {  
                            if (c != null)  
                                holder.unlockCanvasAndPost(c);  
                        }  
                        mHandler.removeCallbacks(drawTarget);  
                        // 調度下一次重繪  
                        if (mVisible)  
                        {  
                            cx1 += 6;  
                            cy1 += 8;  
                            // 如果cx1、cy1移出屏幕后從左上角重新開始  
                            if (cx1 > 320)  
                                cx1 = 15;  
                            if (cy1 > 400)  
                                cy1 = 20;  
                            cx2 -= 6;  
                            cy2 -= 8;  
                            // 如果cx2、cy2移出屏幕后從右下角重新開始  
                            if (cx2 <15)  
                                cx2 = 300;  
                            if (cy2 <20)  
                                cy2 = 380;  
                              
                              
                            cx3 -= 6;  
                            cy3 += 8;  
                            // 如果cx3、cy3移出屏幕后從右上角重新開始  
                            if (cx3 <0)  
                                cx3 = 300;  
                            if (cy3 >400)  
                                cy3 = 20;  
                              
                              
                            cx4 += 6;  
                            cy4 -= 8;  
                            // 如果cx4、cy4移出屏幕后從左下角重新開始  
                            if (cx4 >320)  
                                cx4 = 15;  
                            if (cy4 <0)  
                                cy4 = 380;  
                            // 指定0.1秒后重新執行mDrawCube一次  
                            mHandler.postDelayed(drawTarget, 3000);  
                        }  
                    }  
              
                    /*// 在屏幕觸碰點繪制圓圈  
                    private void drawTouchPoint(Canvas c)  
                    {  
                        if (mTouchX >= 0 && mTouchY >= 0)  
                        {  
                            c.drawCircle(mTouchX, mTouchY, 40, mPaint);  
                        }  
                    }*/  
                }  
            }

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女