Android : Live Wallpaper, black screen

on Wednesday, March 18, 2015


Im trying to get some frame animations working with live wallpapers, Being that I really haven't ventured beyond activities and fragments before its all a bit confusing. Following a hotchpotch of examples iv arrived at this. problem is that when i set the wallpaper, all i get is a black screen. many tanx!



public class MainActivity extends Activity {

private Button myButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myButton= (Button)findViewById(R.id.button1);


myButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
i.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
new ComponentName(MainActivity.this,Wallpaper.class));
startActivity(i);
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}


public class Wallpaper extends WallpaperService {

static final Handler myHandler = new Handler();

@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
}

@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}

@Override
public Engine onCreateEngine() {
// TODO Auto-generated method stub
return new WallpaperSerEngine();
}


The wallpaper engine



class WallpaperSerEngine extends Engine {
private boolean isVisible;
private float myScaleX;
private float myScaleY;
private Bitmap icon;
private Runnable myRunnable;
public int i = 0;
private Bitmap mainBitmap;
private BitmapFactory.Options myBitmapOption;
private int index = 0;
private long delayMillis = 90;
int[] zone2 = { R.drawable.seven0000, R.drawable.seven0001,
R.drawable.seven0002, R.drawable.seven0003,
R.drawable.seven0004, R.drawable.seven0005,
R.drawable.seven0006, R.drawable.seven0007,
R.drawable.seven0008, R.drawable.seven0009,
R.drawable.seven0010, R.drawable.seven0011,
R.drawable.seven0012, R.drawable.seven0013,
R.drawable.seven0014, R.drawable.seven0015,
R.drawable.seven0016, R.drawable.seven0017,
R.drawable.seven0018, R.drawable.seven0019,
R.drawable.seven0020, R.drawable.seven0021,
R.drawable.seven0022, R.drawable.seven0023,
R.drawable.seven0024, R.drawable.seven0025,
R.drawable.seven0026, R.drawable.seven0027,
R.drawable.seven0028, R.drawable.seven0029,
R.drawable.seven0030,

};

WallpaperSerEngine() {
myRunnable = new Runnable() {
public void run() {
drawFrame();
}
};
startMainBitmap(getResources(), zone2[0]);
}

private void startMainBitmap(Resources res, int resId) {
myBitmapOption = new BitmapFactory.Options();
myBitmapOption.inJustDecodeBounds = true;
myBitmapOption.inMutable = true;
BitmapFactory.decodeResource(res, resId, myBitmapOption);

mainBitmap = Bitmap.createBitmap(myBitmapOption.outWidth,
myBitmapOption.outHeight, Bitmap.Config.ARGB_8888);
myBitmapOption.inJustDecodeBounds = false;
myBitmapOption.inSampleSize = 1;
}

public boolean setToFrame(int frameIndex) {
if (zone2 != null && frameIndex >= 0 && frameIndex < zone2.length) {
index = frameIndex;
mainBitmap = BitmapFactory.decodeResource(getResources(),
zone2[index], myBitmapOption);
return true;
} else
return false;
}

@Override
public void onCreate(SurfaceHolder surfaceHolder) {
// TODO Auto-generated method stub
super.onCreate(surfaceHolder);
}

@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
myHandler.removeCallbacks(myRunnable);
}

@Override
public void onOffsetsChanged(float xOffset, float yOffset,
float xOffsetStep, float yOffsetStep, int xPixelOffset,
int yPixelOffset) {
drawFrame();
}

@Override
public void onSurfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
// TODO Auto-generated method stub
super.onSurfaceChanged(holder, format, width, height);
drawFrame();
}

@Override
public void onSurfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
super.onSurfaceCreated(holder);
}

@Override
public void onSurfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
super.onSurfaceDestroyed(holder);
isVisible=false;
myHandler.removeCallbacks(myRunnable);
}

@Override
public void onVisibilityChanged(boolean visible) {
isVisible = visible;
if (visible) {
drawFrame();

} else {
myHandler.removeCallbacks(myRunnable);
}
// TODO Auto-generated method stub
super.onVisibilityChanged(visible);
}

private void drawFrame() {
final SurfaceHolder myHolder = getSurfaceHolder();
Canvas myCanvas = null;
try {
myCanvas = myHolder.lockCanvas();
if (myCanvas != null) {
drawWallpaper(myCanvas);
}

} finally {
if (myCanvas != null)
myHolder.unlockCanvasAndPost(myCanvas);

}
myHandler.removeCallbacks(myRunnable);
if (isVisible) {
myHandler.postDelayed(myRunnable, delayMillis);
}
}

private void drawWallpaper(Canvas c) {
setToFrame(i);
i++;
if (i == 30) {
i = 0;
}
Matrix myMatrix = new Matrix();
c.scale(myScaleX, myScaleY);
c.drawBitmap(mainBitmap, myMatrix, null);
}

}
}

0 comments:

Post a Comment