简体   繁体   中英

Eclipse Juno Android Error, styles.xml error

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

  1. File->Import (android-sdk\\extras\\android\\support\\v7).
  2. Choose "appcompat" Project-> properties->Android.
  3. In the section library "Add" and choose "appCompat"

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM