Live Wallpaper动态壁纸开发

对于Android 2.1来说Live Wallpapers动态壁纸的加入为Android桌面加入了更好的动态效果。如何开发一个Android动态桌面呢? 下面Android123给大家一个详细的步骤创建属于你自己的Live Wallpaper吧。

  1. 首先我使用Eclipse创建一个标准的Android工程这里package name我们使用cn.com.android123.cwj,然后进入工程的/res/文件夹,删除layout这个文件夹,当然里面的main.xml也会被删除的,对于Live Wallpaper来说传统的布局文件是不需要的。

  2. 类似AppWidget一样,我们可以加入动态壁纸的设置界面,我们在/res/文件夹中新建一个名为xml的文件夹,新建一个utf8编码的xml文件,名为livewallpaper.xml,内容为

   <?xml version="1.0" encoding="utf-8"?>
  <wallpaper xmlns:android="http://schemas.android.com/apk/res/android"
 android:settingsActivity="cn.com.android123.cwj.LiveWallpaperSettings"
 android:thumbnail="@drawable/icon"/>

   这里我们可以看到上面的节点名为wallpaper,而设置的界面为 cn.com.android123.cwj.LiveWallpaperSettings  这个Activity,而在添加动态壁纸时显示图标为/res/drawable/icon 这个文件,同时我们再创建一个xml文件用于LiveWallpaperSettings这个Activity的布局,我们起名为livewallpaper_settings.xml内容为

  <?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
 android:title="@string/livewallpaper_settings"
 android:key="livewallpaper_settings">

 <ListPreference
  android:key="livewallpaper_testpattern"
  android:title="标题"
  android:summary="简单描述"
  android:entries="@array/livewallpaper_testpattern_names"
  android:entryValues="@array/livewallpaper_testpattern_prefix"/>

 <CheckBoxPreference android:key="livewallpaper_movement"
  android:summary="动态描述"
  android:title="动态标题"
  android:summaryOn="动态测试"
  android:summaryOff="静止测试"/>
</PreferenceScreen>

  3. 创建一个名为LiveWallpaper的类作为动态壁纸的主类,从WallpaperService父类继承,这里我们可以像写标准Android服务那样开发,代码为

  public class LiveWallpaper extends WallpaperService
{

 public static final String SHARED_PREFS_NAME = "livewallpapersettings";

 @Override
 public void onCreate()
 {
  super.onCreate();
 }

 @Override
 public void onDestroy()
 {
  super.onDestroy();
 }

 @Override
 public Engine onCreateEngine()
 {
  return new TestPatternEngine();
 }

 class TestPatternEngine extends Engine implements
   SharedPreferences.OnSharedPreferenceChangeListener
 {

  private final Handler  mHandler  = new Handler();
  private float    mTouchX   = -1;
  private float    mTouchY   = -1;
  private final Paint   mPaint   = new Paint();
  private final Runnable  mDrawPattern = new Runnable()
             {
              public void run()
              {
               drawFrame();
              }
             };
  private boolean    mVisible;
  private SharedPreferences mPreferences;

  private Rect    mRectFrame;

  private Rect[]    mColorRectangles;
  private int[]    rectColor;
  private int     mRectCount;

  // private
  private Rect    mGradientRect;
  GradientDrawable   mGradient;
  private boolean    mHorizontal  = false;
  private int     mFrameCounter = 0;
  private boolean    mMotion   = true;
  private String    mShape   = "smpte";

  TestPatternEngine()
  {
   final Paint paint = mPaint;
   paint.setColor(0xffffffff);
   paint.setAntiAlias(true);
   paint.setStrokeWidth(2);
   paint.setStrokeCap(Paint.Cap.ROUND);
   paint.setStyle(Paint.Style.STROKE);

   mPreferences = LiveWallpaper.this.getSharedPreferences(SHARED_PREFS_NAME, 0);
   mPreferences.registerOnSharedPreferenceChangeListener(this);
   onSharedPreferenceChanged(mPreferences, null);
  }

  public void onSharedPreferenceChanged(SharedPreferences prefs,
    String key)
  {
   mShape = prefs.getString("livewallpaper_testpattern", "smpte");
   mMotion = prefs.getBoolean("livewallpaper_movement", true);
   readColors();
  }

  private void readColors()
  {

   int pid = getResources().getIdentifier(mShape + "colors", "array", getPackageName());

   rectColor = getResources().getIntArray(pid);
   mRectCount = rectColor.length;
   mColorRectangles = new Rect[mRectCount];

   System.out.println("mRectCount "+mRectCount);
   initFrameParams();
  }

  @Override
  public void onCreate(SurfaceHolder surfaceHolder)
  {
   super.onCreate(surfaceHolder);
   setTouchEventsEnabled(true);
  }

  @Override
  public void onDestroy()
  {
   super.onDestroy();
   mHandler.removeCallbacks(mDrawPattern);
  }

  @Override
  public void onVisibilityChanged(boolean visible)
  {
   mVisible = visible;
   if (visible)
   {
    drawFrame();
   }
   else
   {
    mHandler.removeCallbacks(mDrawPattern);
   }
  }

  @Override
  public void onSurfaceChanged(SurfaceHolder holder, int format,
    int width, int height)
  {
   super.onSurfaceChanged(holder, format, width, height);

   initFrameParams();

   drawFrame();
  }

  @Override
  public void onSurfaceCreated(SurfaceHolder holder)
  {
   super.onSurfaceCreated(holder);
  }

  @Override
  public void onSurfaceDestroyed(SurfaceHolder holder)
  {
   super.onSurfaceDestroyed(holder);
   mVisible = false;
   mHandler.removeCallbacks(mDrawPattern);
  }

  @Override
  public void onOffsetsChanged(float xOffset, float yOffset, float xStep,
    float yStep, int xPixels, int yPixels)
  {

   drawFrame();
  }

   @Override
  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);
  }

 

  void drawFrame()
  {
   final SurfaceHolder holder = getSurfaceHolder();

   Canvas c = null;
   try
   {
    c = holder.lockCanvas();
    if (c != null)
    {
     // draw something
     drawPattern(c);
     drawTouchPoint(c);
    }
   }
   finally
   {
    if (c != null)
     holder.unlockCanvasAndPost(c);
   }

   mHandler.removeCallbacks(mDrawPattern);
   if (mVisible)
   {
    mHandler.postDelayed(mDrawPattern, 1000 / 25);
   }
  }

  void drawPattern(Canvas c)
  {
   c.save();
   c.drawColor(0xff000000);

   Paint paint = new Paint();
   if (mMotion)
   {
    mFrameCounter++;
    if (mHorizontal)
    {
     int right;
     int left;
     if (mFrameCounter > mRectFrame.right)
      mFrameCounter = 0;
     
     for (int i = 0; i < mRectCount; i++)
     {
      paint.setColor(rectColor[i]);

      right = mColorRectangles[i].right + mFrameCounter;
      left = mColorRectangles[i].left + mFrameCounter;

      if(right > mRectFrame.right)
      {
       c.drawRect(left - mRectFrame.right, mColorRectangles[i].top, right - mRectFrame.right, mColorRectangles[i].bottom, paint);
      }

      if(left < mRectFrame.right)
      {
       c.drawRect(left, mColorRectangles[i].top, right, mColorRectangles[i].bottom, paint);
      }
     }
     
     if(mShape.compareToIgnoreCase("smpte") == 0)
     {
      right =mGradientRect.right + mFrameCounter;
      left = mGradientRect.left + mFrameCounter;
      if(right > mRectFrame.right)
      {
       mGradient.setBounds(left - mRectFrame.right, mGradientRect.top, right - mRectFrame.right, mGradientRect.bottom);
       mGradient.draw(c);
      }

      if(left < mRectFrame.right)
      {
       mGradient.setBounds(left, mGradientRect.top, right, mGradientRect.bottom);
       mGradient.draw(c);
      }
     }
    }
    else
    {
     int top;
     int bottom;
     if (mFrameCounter > mRectFrame.bottom)
      mFrameCounter = 0;

     
     for (int i = 0; i < mRectCount; i++)
     {
      paint.setColor(rectColor[i]);

      top = mColorRectangles[i].top + mFrameCounter;
      bottom = mColorRectangles[i].bottom + mFrameCounter;

      if(bottom > mRectFrame.bottom)
      {
       c.drawRect(mColorRectangles[i].left, top - mRectFrame.bottom, mColorRectangles[i].right, bottom - mRectFrame.bottom, paint);
      }

      if(top < mRectFrame.bottom)
      {
       c.drawRect(mColorRectangles[i].left, top, mColorRectangles[i].right, bottom, paint);
      }
     }
     
     if(mShape.compareToIgnoreCase("smpte") == 0)
     {
      top = mGradientRect.top + mFrameCounter;
      bottom = mGradientRect.bottom + mFrameCounter;

      if(bottom > mRectFrame.bottom)
      {
       mGradient.setBounds(mGradientRect.left, top - mRectFrame.bottom, mGradientRect.right, bottom - mRectFrame.bottom);
       mGradient.draw(c);
      }

      if(top < mRectFrame.bottom)
      {
       mGradient.setBounds(mGradientRect.left, top, mGradientRect.right, bottom);
       mGradient.draw(c);
      }

     }
    }
   }
   else
   {
    for (int i = 0; i < mRectCount; i++)
    {
     paint.setColor(rectColor[i]);
     c.drawRect(mColorRectangles[i], paint);
    }

    if(mShape.compareToIgnoreCase("smpte") == 0)
    {
     mGradient.setBounds(mGradientRect);
     mGradient.draw(c);
    }
   }
   c.restore();
  }

  void drawTouchPoint(Canvas c)
  {
   if (mTouchX >= 0 && mTouchY >= 0)
   {
    c.drawCircle(mTouchX, mTouchY, 80, mPaint);
   }
  }

  void initFrameParams()
  {
   DisplayMetrics metrics = new DisplayMetrics();
   Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
   display.getMetrics(metrics);

   mRectFrame = new Rect(0, 0, metrics.widthPixels, metrics.heightPixels);

   
   int rotation = display.getOrientation();
   if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180)
    mHorizontal = false;
   else
    mHorizontal = true;

   System.out.println("mHorizontal "+mHorizontal);
   System.out.println("mShape "+mShape);
   if(mShape.compareToIgnoreCase("smpte") == 0)
   {
    System.out.println("mShape == smpte");
   
    CreateSmpte();
   }
   else if(mShape.compareToIgnoreCase("bars") == 0)
   {
    System.out.println("mShape == bars");
    CreateBars();
   }
   else
   {
    System.out.println("mShape == ebu");
    CreateEbu();
   }
  }
  
  private void CreateSmpte()
  {
   if(mHorizontal)
   {
    int topHeight = mRectFrame.bottom * 7 / 12;
    int bottomHeight = mRectFrame.bottom * 3 / 4;
    int wideColumnWidth = mRectFrame.right / 8;
    int narrowColumnWidth = mRectFrame.right * 3 / 28;

    mColorRectangles[0] = new Rect(0, 0, wideColumnWidth, topHeight);
    for (int i = 1; i < 8; i++)
    {
     mColorRectangles[i] = new Rect(mColorRectangles[i - 1].right, 0, mColorRectangles[i - 1].right + narrowColumnWidth, topHeight);
    }

    mColorRectangles[8] = new Rect(mColorRectangles[7].right, 0, mRectFrame.right, topHeight);

    for (int i = 0; i < 2; i++)
    {
     int middleTop = mRectFrame.bottom * (7 + i) / 12;
     int middleBottom = mRectFrame.bottom * (8 + i) / 12;
     mColorRectangles[i + 9] = new Rect(0, middleTop, wideColumnWidth, middleBottom);
     mColorRectangles[i + 11] = new Rect(wideColumnWidth, middleTop, narrowColumnWidth + wideColumnWidth, middleBottom);
     mColorRectangles[i + 13] = new Rect(narrowColumnWidth * 7 + wideColumnWidth, middleTop, mRectFrame.right, middleBottom);
    }

    mColorRectangles[15] = new Rect(narrowColumnWidth + wideColumnWidth, topHeight, narrowColumnWidth * 7 + wideColumnWidth, mRectFrame.bottom * 8 / 12);

    mGradientRect = new Rect(mColorRectangles[15].left, mColorRectangles[15].bottom, mColorRectangles[15].right, mRectFrame.bottom * 9 / 12);
    mGradient = new GradientDrawable(Orientation.LEFT_RIGHT, new int[] { 0xff050505, 0xfffdfdfd });
    mGradient.setBounds(mGradientRect);

    mColorRectangles[16] = new Rect(0, bottomHeight, wideColumnWidth, mRectFrame.right);
    mColorRectangles[17] = new Rect(mColorRectangles[16].right, bottomHeight, mRectFrame.right * 9 / 56 + mColorRectangles[16].right, mRectFrame.bottom);
    mColorRectangles[18] = new Rect(mColorRectangles[17].right, bottomHeight, mRectFrame.right * 3 / 14 + mColorRectangles[17].right, mRectFrame.bottom);
    mColorRectangles[19] = new Rect(mColorRectangles[18].right, bottomHeight, mRectFrame.right * 45 / 448 + mColorRectangles[18].right, mRectFrame.bottom);
    for (int i = 20; i < 25; i++)
    {
     mColorRectangles[i] = new Rect(mColorRectangles[i - 1].right, bottomHeight, mRectFrame.right * 15 / 448 + mColorRectangles[i - 1].right, mRectFrame.right);
    }
    mColorRectangles[25] = new Rect(mColorRectangles[24].right, bottomHeight, narrowColumnWidth + mColorRectangles[24].right, mRectFrame.bottom);
    mColorRectangles[26] = new Rect(mColorRectangles[25].right, bottomHeight, mRectFrame.right, mRectFrame.bottom);
   }
   else
   {
    int topHeight = mRectFrame.right * 5 / 12;
    int bottomHeight = mRectFrame.right / 4;
    int wideColumnWidth = mRectFrame.bottom / 8;
    int narrowColumnWidth = mRectFrame.bottom * 3 / 28;

    mColorRectangles[0] = new Rect(topHeight, 0, mRectFrame.bottom, wideColumnWidth);

    for (int i = 1; i < 8; i++)
    {
     mColorRectangles[i] = new Rect(topHeight, mColorRectangles[i - 1].bottom, mRectFrame.right, narrowColumnWidth + mColorRectangles[i - 1].bottom);
    }

    mColorRectangles[8] = new Rect(topHeight, mColorRectangles[7].bottom, mRectFrame.right, mRectFrame.bottom);

    for (int i = 0; i < 2; i++)
    {
     int middleLeft = mRectFrame.right * (4 - i) / 12;
     int middleRight = mRectFrame.right * (5 - i) / 12;
     mColorRectangles[i + 9] = new Rect(middleLeft, 0, middleRight, wideColumnWidth);
     mColorRectangles[i + 11] = new Rect(middleLeft, wideColumnWidth, middleRight, narrowColumnWidth + wideColumnWidth);
     mColorRectangles[i + 13] = new Rect(middleLeft, narrowColumnWidth * 7 + wideColumnWidth, middleRight, mRectFrame.bottom);
    }
    mColorRectangles[15] = new Rect(mRectFrame.right * 4 / 12, narrowColumnWidth + wideColumnWidth, mRectFrame.right * 5 / 12, narrowColumnWidth * 7 + wideColumnWidth);

    mGradientRect = new Rect(mRectFrame.right * 3 / 12, mColorRectangles[15].top, mColorRectangles[15].left, mColorRectangles[15].bottom);
    mGradient = new GradientDrawable(Orientation.TOP_BOTTOM, new int[] { 0xff050505, 0xfffdfdfd });
    mGradient.setBounds(mGradientRect);

    mColorRectangles[16] = new Rect(0, 0, bottomHeight, wideColumnWidth);
    mColorRectangles[17] = new Rect(0, mColorRectangles[16].bottom, bottomHeight, mRectFrame.bottom * 9 / 56 + mColorRectangles[16].bottom);
    mColorRectangles[18] = new Rect(0, mColorRectangles[17].bottom, bottomHeight, mRectFrame.bottom * 3 / 14 + mColorRectangles[17].bottom);
    mColorRectangles[19] = new Rect(0, mColorRectangles[18].bottom, bottomHeight, mRectFrame.bottom * 45 / 448 + mColorRectangles[18].bottom);
    for (int i = 20; i < 25; i++)
    {
     mColorRectangles[i] = new Rect(0, mColorRectangles[i - 1].bottom, bottomHeight, mRectFrame.bottom * 15 / 448 + mColorRectangles[i - 1].bottom);
    }
    mColorRectangles[25] = new Rect(0, mColorRectangles[24].bottom, bottomHeight, narrowColumnWidth + mColorRectangles[24].bottom);
    mColorRectangles[26] = new Rect(0, mColorRectangles[25].bottom, bottomHeight, mRectFrame.bottom);
   }
  }

  private void CreateBars()
  {
   if(mHorizontal)
   {
    int narrowColumnWidth = mRectFrame.right / 7;
    int wideColumnWidth = mRectFrame.right * 5 / 28;
    int narrowestColumnWidth = mRectFrame.right / 21;
    
    int topColumnHeight = mRectFrame.bottom *2/3;
    int middleColumnHeight = mRectFrame.bottom /12;
    
    mColorRectangles[0] = new Rect(0, 0, narrowColumnWidth, topColumnHeight);  
    for (int i = 1; i < 7; i++)
    {
     mColorRectangles[i] = new Rect(mColorRectangles[i - 1].right, 0, mColorRectangles[i - 1].right + narrowColumnWidth, topColumnHeight);  
    }

    mColorRectangles[7] = new Rect(0, mColorRectangles[0].bottom, narrowColumnWidth, mColorRectangles[0].bottom + middleColumnHeight);  
    for (int i = 8; i < 14; i++)
    {
     mColorRectangles[i] = new Rect(mColorRectangles[i - 1].right, mColorRectangles[7].top, mColorRectangles[i - 1].right + narrowColumnWidth, mColorRectangles[7].bottom);  
    }

    mColorRectangles[14] = new Rect(0, mColorRectangles[7].bottom, wideColumnWidth, mRectFrame.bottom);  
    for (int i = 15; i < 18; i++)
    {
     mColorRectangles[i] = new Rect(mColorRectangles[i - 1].right, mColorRectangles[14].top, mColorRectangles[i - 1].right + wideColumnWidth, mRectFrame.bottom);  
    }

    mColorRectangles[18] = new Rect(mColorRectangles[17].right, mColorRectangles[17].top, mColorRectangles[17].right + narrowestColumnWidth, mRectFrame.bottom);  
    for (int i = 19; i < 21; i++)
    {
     mColorRectangles[i] = new Rect(mColorRectangles[i - 1].right, mColorRectangles[14].top, mColorRectangles[i - 1].right + narrowestColumnWidth, mRectFrame.bottom);  
    }
    mColorRectangles[21] = new Rect(mColorRectangles[20].right, mColorRectangles[17].top, mColorRectangles[6].right, mRectFrame.bottom);  

   }
   else
   {
    int narrowColumnWidth = mRectFrame.bottom / 7;
    int wideColumnWidth = mRectFrame.bottom * 5 / 28;
    int narrowestColumnWidth = mRectFrame.bottom / 21;
    
    int topColumnHeight = mRectFrame.right /3;
    int middleColumnHeight = mRectFrame.right /12;
    
    mColorRectangles[0] = new Rect(topColumnHeight, 0, mRectFrame.right, narrowColumnWidth);  
    for (int i = 1; i < 7; i++)
    {
     mColorRectangles[i] = new Rect(topColumnHeight, mColorRectangles[i - 1].bottom, mRectFrame.right, mColorRectangles[i - 1].bottom + narrowColumnWidth);  
    }

    mColorRectangles[7] = new Rect(mColorRectangles[0].left + middleColumnHeight, 0, mColorRectangles[0].left, narrowColumnWidth);  
    for (int i = 8; i < 14; i++)
    {
     mColorRectangles[i] = new Rect(mColorRectangles[7].left, mColorRectangles[i - 1].bottom, mColorRectangles[7].right, mColorRectangles[i - 1].bottom + narrowColumnWidth);  
    }

    mColorRectangles[14] = new Rect(0, 0, mColorRectangles[7].right,  wideColumnWidth);  
    for (int i = 15; i < 18; i++)
    {
     mColorRectangles[i] = new Rect(0, mColorRectangles[i - 1].bottom, mColorRectangles[7].right, mColorRectangles[i - 1].bottom + wideColumnWidth);  
    }

    mColorRectangles[18] = new Rect(0, mColorRectangles[17].bottom, mColorRectangles[7].right, mColorRectangles[17].bottom + narrowestColumnWidth);  
    for (int i = 19; i < 21; i++)
    {
     mColorRectangles[i] = new Rect(0, mColorRectangles[i - 1].bottom, mColorRectangles[7].right, mColorRectangles[i - 1].bottom + narrowestColumnWidth);  
    }
    mColorRectangles[21] = new Rect(0, mColorRectangles[20].bottom, mColorRectangles[7].right, mRectFrame.bottom);  
    
   }
  }

  private void CreateEbu()
  {
   if(mHorizontal)
   {
    int narrowColumnWidth = mRectFrame.right / 8;

    mColorRectangles[0] = new Rect(0, 0, narrowColumnWidth, mRectFrame.bottom);  
    for (int i = 1; i < 8; i++)
    {
     mColorRectangles[i] = new Rect(mColorRectangles[i - 1].right, 0, mColorRectangles[i - 1].right + narrowColumnWidth, mRectFrame.bottom);  
    }

   }
   else
   {
    int narrowColumnWidth = mRectFrame.bottom / 8;


    mColorRectangles[0] = new Rect(0, 0, mRectFrame.right, narrowColumnWidth);
    for (int i = 1; i < 8; i++)
    {
     mColorRectangles[i] = new Rect(0, mColorRectangles[i - 1].bottom, mRectFrame.right, narrowColumnWidth + mColorRectangles[i - 1].bottom);
    }
   }
  }
 }
}

 这里需要注意的是在androidmanifest.xml文件中加入

<service android:name=".LiveWallpaper" android:label="@string/app_name"  android:icon="@drawable/icon">
   <intent-filter>
      <action android:name="android.service.wallpaper.WallpaperService" />
    </intent-filter>
    <meta-data android:name="android.service.wallpaper" android:resource="@xml/livewallpaper" />
</service>

4.   新建类LiveWallpaperSettings从 PreferenceActivity 继承实现我们的设置界面,代码如下

  public class LiveWallpaperSettings extends PreferenceActivity
 implements SharedPreferences.OnSharedPreferenceChangeListener
{
 @Override
 protected void onCreate(Bundle icicle)
 {
  super.onCreate(icicle);
  getPreferenceManager().setSharedPreferencesName(LiveWallpaper.SHARED_PREFS_NAME);
  addPreferencesFromResource(R.xml.livewallpaper_settings);
  getPreferenceManager().getSharedPreferences()
    .registerOnSharedPreferenceChangeListener(this);
 }
 
 @Override
 protected void onResume()
 {
  super.onResume();
 }

 @Override
 protected void onDestroy()
 {
  getPreferenceManager().getSharedPreferences()
    .unregisterOnSharedPreferenceChangeListener(this);
  super.onDestroy();
 }

 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
   String key)
 {
 }
}

同时仍然在androidmanifest.xml中加入 下面的代码。

<activity android:label="@string/livewallpaper_settings"
   android:name=".LiveWallpaperSettings"
   android:theme="@android:style/Theme.Light.WallpaperSettings"
   android:exported="true"
   android:icon="@drawable/icon">
  </activity>

5. 由于Android动态壁纸是2.1 API Level为7才加入的,所以设置好minSDK以及需要设备支持动态壁纸,我们在androidmanifest.xml中加入

 <uses-sdk android:minSdkVersion="7" />
 <uses-feature android:name="android.software.live_wallpaper" />

 6. 对于文中ListPreference用到的数组,及代码中涉及的颜色数组,我们在/res/values/ 文件夹中创建一个名为testpatterns.xml 的文件,内容为

  <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
 <string-array name="livewallpaper_testpattern_names">
  <item>"Color Bars 16x9"</item>
  <item>"Color Bars 4x3"</item>
  <item>"EBU Color Bars"</item>
 </string-array>

 <string-array name="livewallpaper_testpattern_prefix">
  <item>"smpte"</item>
  <item>"bars"</item>
  <item>"ebu"</item>
 </string-array>

 <integer-array name="smptecolors">
  <item>0xFF696969</item>
  <item>0xFFC1C1C1</item>
  <item>0xFFC1C100</item>
  <item>0xFF00C1C1</item>
  <item>0xFF00C100</item>
  <item>0xFFC100C1</item>
  <item>0xFFC10000</item>
  <item>0xFF0000C1</item>
  <item>0xFF696969</item>
  <item>0xFF00FFFF</item>
  <item>0xFFFFFF00</item>
  <item>0xFF052550</item>
  <item>0xFF36056D</item>
  <item>0xFF0000FF</item>
  <item>0xFFFF0000</item>
  <item>0xFFC1C1C1</item>
  <item>0xFF2B2B2B</item>
  <item>0xFF050505</item>
  <item>0xFFFFFFFF</item>
  <item>0xFF050505</item>
  <item>0xFF000000</item>
  <item>0xFF050505</item>
  <item>0xFF0A0A0A</item>
  <item>0xFF050505</item>
  <item>0xFF0D0D0D</item>
  <item>0xFF050505</item>
  <item>0xFF2b2b2b</item>
 </integer-array>

 <integer-array name="barscolors">
  <item>0xFFC0C0C0</item>
  <item>0xFFC0C000</item>
  <item>0xFF00C0C0</item>
  <item>0xFF00C000</item>
  <item>0xFFC000C0</item>
  <item>0xFFC00000</item>
  <item>0xFF0000C0</item>
  <item>0xFF0000C0</item>
  <item>0xFF131313</item>
  <item>0xFFC000C0</item>
  <item>0xFF131313</item>
  <item>0xFF00C0C0</item>
  <item>0xFF131313</item>
  <item>0xFFC0C0C0</item>
  <item>0xFF00214C</item>
  <item>0xFFFFFFFF</item>
  <item>0xFF32006A</item>
  <item>0xFF131313</item>
  <item>0xFF090909</item>
  <item>0xFF131313</item>
  <item>0xFF1D1D1D</item>
  <item>0xFF131313</item>
 </integer-array>

 <integer-array name="ebucolors">
  <item>0xFFBFBFBF</item>
  <item>0xFFBFBF00</item>
  <item>0xFF00BFBF</item>
  <item>0xFF00BF00</item>
  <item>0xFFBF00BF</item>
  <item>0xFFBF0000</item>
  <item>0xFF0000BF</item>
  <item>0xFF000000</item>
 </integer-array>
</resources>


你可能感兴趣的:(Live Wallpaper动态壁纸开发)