Android牆紙的設定

來源:互聯網
上載者:User

標籤:

這是個全民看臉的時代,手機也一樣。漂亮的APP給手機增色不少,那就趕緊給你這個女朋友打扮一下吧。

從設定靜態壁紙,到動態壁紙,到鎖屏壁紙,再到主題,其實也沒那麼簡單。

1、設定靜態壁紙

MainActivity.java

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);wallpaperManager = WallpaperManager.getInstance(this);registerReceiver(broadcastReceiver, new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED));}WallpaperManager wallpaperManager;public void onClick(View v){switch(v.getId()){case R.id.btn_setWallpaper:File file = new File(Environment.getExternalStorageDirectory()+"/pictures/field.png");try {InputStream is = new FileInputStream(file);//ContextWrapper方法,可讀Bitmap、InputStream//需SET_WALLPAPER許可權。讀檔案需WRITE_EXTERNAL_STORAGE許可權setWallpaper(is);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}break;case R.id.btn_setWallpaper2://可載入res、InputStream、Bitmaptry {wallpaperManager.setResource(R.drawable.frame);} catch (IOException e) {e.printStackTrace();}break;case R.id.btn_clearWallpaper://清除壁紙try {wallpaperManager.clear();} catch (IOException e) {e.printStackTrace();}}}//接收壁紙改變廣播private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {if(intent.getAction().equals(Intent.ACTION_WALLPAPER_CHANGED)){Toast.makeText(MainActivity.this, "已更改牆紙", Toast.LENGTH_SHORT).show();}}};}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    xmlns:android="http://schemas.android.com/apk/res/android">    <Button         android:id="@+id/btn_setWallpaper"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="onClick"        android:text="setWallpaper"/>    <Button         android:id="@+id/btn_setWallpaper2"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="onClick"        android:text="setWallpaper2"/>    <Button         android:id="@+id/btn_clearWallpaper"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="onClick"        android:text="clearWallpaper"/></LinearLayout>
2、設定動態壁紙

MyWallpaperService.java,每次從動態壁紙庫選擇當前壁紙會觸發該Service執行個體化並調用onCreateEngine

/** * 封裝器Service,用來執行個體化和管理Engine */public class MyWallpaperService extends WallpaperService {private static final String TAG = MyWallpaperService.class.getSimpleName();public MyWallpaperService(){super();Log.d(TAG, "MyWallpaperService");}@Overridepublic Engine onCreateEngine() {Log.d(TAG, "onCreateEngine");return new MyWallpaperServiceEngine(this);}}
MyWallpaperServiceEngine.java
/** * Engine封裝一個用於顯示牆紙的SurfaceView * <P>SurfaceView雙緩衝機制:一個front buffer,一個back buffer。假設當前顯示的是front,若內容發生變化, * back在原來基礎上把內容畫好。然後back和front交換位置。<P> */public class MyWallpaperServiceEngine extends WallpaperService.Engine {private static final String TAG = MyWallpaperServiceEngine.class.getSimpleName();//每秒30個frameprivate static final int FPS = 5;private final Handler handler = new Handler();public MyWallpaperServiceEngine(WallpaperService wp){wp.super();paint = new Paint();paint.setARGB(255, 255, 255, 255);}@Overridepublic void onCreate(SurfaceHolder surfaceHolder) {super.onCreate(surfaceHolder);}@Overridepublic void onOffsetsChanged(float xOffset, float yOffset,float xOffsetStep, float yOffsetStep, int xPixelOffset,int yPixelOffset) {super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, xPixelOffset, yPixelOffset);}@Overridepublic void onTouchEvent(MotionEvent event) {super.onTouchEvent(event);}Timer timer;@Overridepublic void onSurfaceCreated(SurfaceHolder holder) {super.onSurfaceCreated(holder);timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {drawFrame();}}, 0, 1000/FPS);}public void onSurfaceDestroyed(SurfaceHolder holder) {timer.cancel();};Paint paint;float y = 300f;private void drawFrame(){final SurfaceHolder holder = getSurfaceHolder();Canvas canvas = null;try{canvas = holder.lockCanvas(new Rect(100, 100, 500, 1100));if(canvas!=null){//清屏,重設像素數組canvas.drawColor(Color.BLACK);//在畫布上繪製canvas.drawCircle(300f, y, 200f, paint);y += 20f;if(y>900f){y = 300f;}}}finally{if(canvas!=null){holder.unlockCanvasAndPost(canvas);}}//handler.removeCallbacks(drawSurface);//handler.postDelayed(drawSurface, 1000/FPS);}private final Runnable drawSurface = new Runnable() {@Overridepublic void run() {drawFrame();}};}
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.qinuli.compiletest"    android:versionCode="1"    android:versionName="1.0" >    <uses-permission android:name="android.permission.SET_WALLPAPER"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>        <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="14" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme"        android:permission="android.permission.BIND_WALLPAPER" >        <activity android:name="com.qinuli.compiletest.MainActivity">            <intent-filter >                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>            </intent-filter>        </activity>        <activity android:name="com.qinuli.compiletest.SettingsActivity"></activity>        <service android:name="com.qinuli.compiletest.MyWallpaperService">            <intent-filter >                <action android:name="android.service.wallpaper.WallpaperService"/>            </intent-filter>            <meta-data                 android:name="android.service.wallpaper"                android:resource="@xml/mylivewallpaper"/>        </service>    </application></manifest>
mylivewallpaper.xml
<wallpaper    xmlns:android="http://schemas.android.com/apk/res/android"    android:author="@string/author"    android:description="@string/description"    android:thumbnail="@drawable/wallpapericon"    android:settingsActivity="com.qinuli.compiletest.SettingsActivity"/>
res/values/strings.xml
<string name="author">石鑫</string><string name="description">即時互動壁紙</string>
SettingsActivity.java
public class SettingsActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_settings);}}
activity_settings.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    xmlns:android="http://schemas.android.com/apk/res/android">    <Button         android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Feel free to ask!"/></LinearLayout>

Android牆紙的設定

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.