获取屏幕分辨率和大小

<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);"></span><pre name="code" class="java" style="font-size: 13.3333339691162px;">// 方法1 Android获得屏幕的宽和高            WindowManager windowManager = getWindowManager();            Display display = windowManager.getDefaultDisplay();            int screenWidth = screenWidth = display.getWidth();            int screenHeight = screenHeight = display.getHeight();                        // 方法2           DisplayMetrics dm = new DisplayMetrics();          getWindowManager().getDefaultDisplay().getMetrics(dm);           float width=dm.widthPixels*dm.density;           float height=dm.heightPixels*dm.density; 
  

设置静态壁纸:

1、别忘记在ApplicationManifest.xml 中加上权限的设置。<uses-permission android:name = "android.permission.SET_WALLPAPER"/>2、设置壁纸的方法总结。壁纸设置方法有三种第一 通过WallpaperManager方法中的 setBitmap()第二 通过WallpaperManager方法中的 setResource()第三 通过ContextWrapper 类中提供的setWallpaper()方法

WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);   Resources res = getResources();   Bitmap bitmap=BitmapFactory.decodeResource(res, getResources().getIdentifier("wallpaper" + imagePosition, "drawable", "com.ch"));   wallpaperManager.setBitmap(bitmap);

动态壁纸

Livewallpaper,即动态墙纸,是Android的一大3D特色功能,用户可以在桌面选择加载动态墙纸,让自己的手机桌面背景旋动起来。
Android动态墙纸的本质是一个“Service”。 <action Android:name="android.service.wallpaper.WallpaperService" />
系统通过APK的这个action把其当做一个动态墙纸加载进LivePicker列表,用户在LivePicker列表里选择自己喜欢的动态墙纸,进而将动态墙纸显示进Launcher的背后。
动态墙纸和Launcher是完全不同的两个进程,只不过Launcher和动态墙纸的进程可以通过框架里的WallpaperManager进行进程间通信罢了,用户在Launcher桌面滑动、点击屏幕时有的动态墙纸能产生交互效果,实际上就是这个进程通信完成的。

实现思路:

1、在res/xml/下添加一个xml文件描述动态壁纸的缩略图,比如livewallpaper.xml: 注意: 这里的android:thumbnail值得是你这个动态壁纸的小图标 会在你选着动态壁纸的时候出现。
android:settingsActivity:添加用于设置的Activity.
<?xml version="1.0" encoding="utf-8"?><wallpaper xmlns:android="http://schemas.android.com/apk/res/android" android:thumbnail="@drawable/icon"  android:description="@string/wallpaper_description"   android:settingsActivity="de.vogella.android.wallpaper.MyPreferencesActivity"/>
2、AndroidManifest配置:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"  package="org.crazyit.desktop"  android:versionCode="1"  android:versionName="1.0">   <uses-feature    //添加feature        android:name="android.software.live_wallpaper"        android:required="true" >    </uses-feature><applicationandroid:icon="@drawable/icon"android:label="@string/app_name"><!-- 配置实时壁纸Service --><service android:label="@string/app_name"android:name=".LiveWallpaper"android:permission="android.permission.BIND_WALLPAPER">  //添加权限<!-- 为实时壁纸配置intent-filter --><intent-filter><actionandroid:name="android.service.wallpaper.WallpaperService" /> //添加intent-filter</intent-filter><!-- 为实时壁纸配置meta-data --><meta-data android:name="android.service.wallpaper"  //添加meta-dataandroid:resource="@xml/livewallpaper" /></service><activity      //添加用于设置的Activity            android:name=".MyPreferencesActivity"            android:exported="true"   //注意设置导出            android:label="@string/app_name"            android:theme="@android:style/Theme.Light.WallpaperSettings" >        </activity></application></manifest> 

3、实现动态壁纸是不需要使用Activity, 创建LiveWallpaper类,让其继承WallpaperService:必须覆盖onCreateEngine()方法,返回自己实现的Engine类
在Engine类中的onCreate()方法中进行调用绘制图形方法。Engine类定义了生命周期方法,如onCreate(), onSurfaceCreated(), onVisibilityChanged(), onOffsetsChanged(), onTouchEvent() and onCommand().
例如以下示例:
public class LiveWallpaper extends WallpaperService{// 实现WallpaperService必须实现的抽象方法public Engine onCreateEngine(){// 返回自定义的Enginereturn 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();// 定义一个HandlerHandler mHandler = new Handler();// 定义一个周期性执行的任务private final Runnable drawTarget = new Runnable(){public void run(){// 动态地绘制图形drawFrame();}};@Overridepublic 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);}@Overridepublic void onDestroy(){super.onDestroy();// 删除回调mHandler.removeCallbacks(drawTarget);}@Overridepublic 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 void drawFrame(){// 获取该壁纸的SurfaceHolderfinal SurfaceHolder holder = getSurfaceHolder();Canvas c = null;try{// 对画布加锁c = holder.lockCanvas();if (c != null){c.save();// 绘制背景色c.drawColor(0xff000000);// 在触碰点绘制圆圈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, 100);}}// 在屏幕触碰点绘制圆圈private void drawTouchPoint(Canvas c){if (mTouchX >= 0 && mTouchY >= 0){c.drawCircle(mTouchX, mTouchY, 40, mPaint);}}}}
4、在Activity中通过Intent调用系统设置livewallpaper界面:
 Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);    intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,        new ComponentName(this, MyWallpaperService.class));    startActivity(intent);        finish();


参考:

http://www.cnblogs.com/flyme/archive/2011/08/15/2139553.html

http://blog.csdn.net/t12x3456/article/details/7857741

http://www.learn-android-easily.com/2013/07/android-livewallpaer-tutorial.html

http://www.vogella.com/tutorials/AndroidLiveWallpaper/article.html

http://code.tutsplus.com/tutorials/creating-live-wallpapers-on-android--mobile-9516

更多相关文章

  1. android打开文件方法
  2. ArcGIS for Android 中MapView截图实现方法
  3. Android:指定分辨率和清晰度的图片压缩方法源码
  4. Android简单获取经纬度的方法
  5. Android拨打电话的两种实现方法
  6. android 基本的画图方法
  7. Handler 内部类导致的内存泄露修改方法
  8. Android 在程序中重启APP的方法
  9. android studio AppCompatActivity中onCreate的两种方法

随机推荐

  1. android 随手记 videoview循环播放网络视
  2. android notifyDataSetChanged不管用
  3. Android(安卓)生成xml文件
  4. Android(安卓)Studio 2中通过getDeclared
  5. android KEYCODE_BACK监听处理
  6. 搬砖,android drag and drop button or i
  7. 如何下载Android(安卓)kernel内核源代码,
  8. Android(安卓)MediaRecorder实现录音机功
  9. Android(安卓)Tips
  10. android 捕获home键