I'm trying, create a view with an animated GIF..
When i try run the follow code in emulator all works fine. But when i try run in real Smart Phone, nothing happens..
My view:
public class GIFView extends View {
private Movie mMovie;
private long movieStart;
public GIFView(Context context) {
super(context);
initializeView();
}
public GIFView(Context context, AttributeSet attrs) {
super(context, attrs);
initializeView();
}
public GIFView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initializeView();
}
private void initializeView() {
InputStream is = getContext().getResources().openRawResource(
R.drawable.cookies2);
mMovie = Movie.decodeStream(is);
}
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);
super.onDraw(canvas);
long now = android.os.SystemClock.uptimeMillis();
if (movieStart == 0) {
movieStart = (int) now;
}
if (mMovie != null) {
int relTime = (int) ((now - movieStart) % mMovie.duration());
mMovie.setTime(relTime);
mMovie.draw(canvas, getWidth() - mMovie.width(), getHeight()
- mMovie.height());
this.invalidate();
}
}}
My activity:
public class MainActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GIFView gifView = new GIFView(this);
setContentView(gifView);
}}
My Smartphone screenshot: My emulator screenshot:
Why my app doesn't run in smartphone?
I dont think the Movie object works correctly on devices where hardware acceleration is turned on (which is turned on by default in Android 4.x for devices that support it. Your emulator may not.)
Try adding
to the activity definition for MainActivity in AndroidManifest.xml
Example:
Don't turn off hardware acceleration for the whole application. That's crippling. Just turn it off for the view:
Loading an animated GIF seems tricky, but I would suggest to use a WebView as an alternative.
Do as follow to resolve the problem :
I hope it helps !