Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 553|回复: 0

开发交流:Live Wallpaper动态壁纸开发

[复制链接]

该用户从未签到

发表于 2011-10-24 09:18:43 | 显示全部楼层 |阅读模式
对于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"?>

&ltreferenceScreen 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);



      right = mColorRectangles.right + mFrameCounter;

      left = mColorRectangles.left + mFrameCounter;



      if(right > mRectFrame.right)

      {

       c.drawRect(left - mRectFrame.right, mColorRectangles.top, right - mRectFrame.right, mColorRectangles.bottom, paint);

      }



      if(left < mRectFrame.right)

      {

       c.drawRect(left, mColorRectangles.top, right, mColorRectangles.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);



      top = mColorRectangles.top + mFrameCounter;

      bottom = mColorRectangles.bottom + mFrameCounter;



      if(bottom > mRectFrame.bottom)

      {

       c.drawRect(mColorRectangles.left, top - mRectFrame.bottom, mColorRectangles.right, bottom - mRectFrame.bottom, paint);

      }



      if(top < mRectFrame.bottom)

      {

       c.drawRect(mColorRectangles.left, top, mColorRectangles.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);

     c.drawRect(mColorRectangles, 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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" />
复制代码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="urnasis: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>
复制代码
回复

使用道具 举报

该用户从未签到

发表于 2011-10-24 09:18:45 | 显示全部楼层

Re:开发交

怎么我按照你的教程弄完,装上去,什么都没有有显示的啊。在动态壁纸里也没有找到设置。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 09:18:53 | 显示全部楼层

Re:开发交

求指导=。=
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 09:18:55 | 显示全部楼层

Re:开发交

这个好,很感兴趣

稍后打算试一下
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 09:18:59 | 显示全部楼层

Re:开发交

这个好,很感兴趣

稍后打算试一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 18:52 , Processed in 0.362363 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表