I have recent purchased Sams Teach Yourself Android Game Programming in 24 Hours. I am currently learning to animate a bitmap image set. the full code is:
package com.example.demojava1;
import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
public class MainActivity extends Activity {
/****************************************************************
* This portion of code represents the "outer" main program. *
* *
* Events here are passed on to the drawing sub-class. *
****************************************************************/
//defines the drawing sub-class object
DrawView drawView;
//onCreate is called any time the program resumes
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
//create the drawing object
drawView = new DrawView(this);
setContentView(drawView);
}
//handle resume/focus events
@Override public void onResume() {
super.onResume();
//pass the resume event on to the sub-class
drawView.resume();
}
//handle pause/minimize events
@Override public void onPause() {
super.onPause();
//pass the pause event on to the sub-class
drawView.pause();
}
/*************************************
* End of "outer" main program code. *
*************************************/
/****************************************************************
* This code represents the new DrawView subclass which handles *
* the real-time loop, updates, and drawing, i.e. the game *
* code. Note that this class now implements Runnable to give *
* it a threaded loop. *
****************************************************************/
public class DrawView extends SurfaceView implements Runnable {
//define the game loop thread
Thread gameloop = null;
//define the surface holder
SurfaceHolder surface;
//define the running variable
volatile boolean running = false;
//the asset manager handles resource loading
AssetManager assets = null;
BitmapFactory.Options options = null;
Bitmap gKnight[];
int frame = 0;
//this is the DrawView class constructor
public DrawView(Context context) {
super(context);
//get the SurfaceHolder object to supply a context
surface = getHolder();
//create the asset manager object
assets = context.getAssets();
//set bitmap color depth option
options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
//create the bitmap array for animation
gKnight = new Bitmap[8];
//load the knight bitmaps
try {
for (int n = 0; n<8; n++) {
String filename = "walking" + Integer.toString(n+1) + ".bmp";
InputStream istream = assets.open(filename);
gKnight[n] = BitmapFactory.decodeStream(istream,null,options);
istream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
//custom resume method called by outer class
public void resume() {
running = true;
gameloop = new Thread(this);
gameloop.start();
}
//custom pause method called by outer class
public void pause() {
running = false;
while (true) {
try {
//just keep doing this until app has focus
gameloop.join();
}
catch (InterruptedException e) {}
}
}
//this is the threaded method
@Override public void run() {
//this is the game loop!
while (running) {
//make sure surface is usable (it's asynchronous)
if (!surface.getSurface().isValid())
continue;
//request the drawing canvas
Canvas canvas = surface.lockCanvas();
/************************************************************
* We should really make sure canvas is not null here *
* before continuing, but if canvas is invalid then *
* the game will cease anyway. *
************************************************************/
//draw one frame of animation from the knight array
canvas.drawColor(Color.rgb(85,107,47));
canvas.drawBitmap(gKnight[frame], 0, 0, null);
//draw the knight scaled larger
Rect dest = new Rect(100, 0, 300, 200);
canvas.drawBitmap(gKnight[frame], null, dest, null);
//draw the knight scaled REALLY BIG!
dest = new Rect(200, 0, 800, 600);
canvas.drawBitmap(gKnight[frame], null, dest, null);
//release the canvas
surface.unlockCanvasAndPost(canvas);
//go to the next frame of animation
frame++;
if (frame > 7) frame = 0;
try {
//slow down the animation
Thread.sleep(50);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
} // end of DrawView sub-class code;
} //end of main
That is the code for the short animation of a green knight walking. There are no errors appearing on that particular set of code. However, in the Package Exploer in these files:
ProjectFolder > res > values > styles.xml
ProjectFolder > res > values-v11 > styles.xml
ProjectFolder > res > values-v14 > styles.xml
The code for the first file is:
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
An ERROR appears where the code reads:
<style name = "AppBaseTheme" parent = "Theme.AppCompat.Light">
The error states: error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'.
Can anyone help? If you have a solution, while I'm getting much better in Java, I have never coded in xml and I am completely new to Android so this is rough for me. The more detailed the walk through the better. Thanks!
Hi frank you need appCompatfor Theme.AppCompat.Light please do following steps
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.