android 删除主屏幕分辨率,Android获取屏幕分辨率和大小与设置壁纸、动态壁纸

获取屏幕分辨率和大小

// 方法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 中加上权限的设置。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”。

系统通过APK的这个action把其当做一个动态墙纸加载进LivePicker列表,用户在LivePicker列表里选择自己喜欢的动态墙纸,进而将动态墙纸显示进Launcher的背后。

动态墙纸和Launcher是完全不同的两个进程,只不过Launcher和动态墙纸的进程可以通过框架里的WallpaperManager进行进程间通信罢了,用户在Launcher桌面滑动、点击屏幕时有的动态墙纸能产生交互效果,实际上就是这个进程通信完成的。

实现思路:

1、在res/xml/下添加一个xml文件描述动态壁纸的缩略图,比如livewallpaper.xml:

注意: 这里的android:thumbnail值得是你这个动态壁纸的小图标 会在你选着动态壁纸的时候出现。

android:settingsActivity:添加用于设置的Activity.

2、AndroidManifest配置:

package="org.crazyit.desktop"

android:versionCode="1"

android:versionName="1.0">

android:name="android.software.live_wallpaper"

android:required="true" >

android:icon="@drawable/icon"

android:label="@string/app_name">

android:name=".LiveWallpaper"

android:permission="android.permission.BIND_WALLPAPER"> //添加权限

//添加intent-filter

android:resource="@xml/livewallpaper" />

android:name=".MyPreferencesActivity"

android:exported="true" //注意设置导出

android:label="@string/app_name"

android:theme="@android:style/Theme.Light.WallpaperSettings" >

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()

{

// 返回自定义的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 void drawFrame()

{

// 获取该壁纸的SurfaceHolder

final 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值