⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 globaltime.java

📁 google android code package
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
        }        return true;    }    @Override public boolean onKeyDown(int keyCode, KeyEvent event) {        if (mInitialized && mGLView.processKey(keyCode)) {            boolean drawing = (mClockShowing || mGLView.hasMessages());            this.setWillNotDraw(!drawing);            return true;        }        boolean handled = false;        // If we're not in alphabetical entry mode, convert letters        // to their digit equivalents        if (!mAlphaKeySet) {            char numChar = event.getNumber();            if (numChar >= '0' && numChar <= '9') {                keyCode = KeyEvent.KEYCODE_0 + (numChar - '0');            }        }        switch (keyCode) {        // The 'space' key toggles the clock        case KeyEvent.KEYCODE_SPACE:            mAlphaKeySet = !mAlphaKeySet;            enableClock(mAlphaKeySet);            handled = true;            break;        // The 'left' and 'right' buttons shift time zones if the clock is        // displayed, otherwise they alters the rotational speed of the earthh        case KeyEvent.KEYCODE_DPAD_LEFT:            if (mDisplayClock) {                shiftTimeZone(-1);            } else {                mClock.setCity(null);                incrementRotationalVelocity(1.0f);            }            handled = true;            break;        case KeyEvent.KEYCODE_DPAD_RIGHT:            if (mDisplayClock) {                shiftTimeZone(1);            } else {                mClock.setCity(null);                incrementRotationalVelocity(-1.0f);            }            handled = true;            break;        // The 'up' and 'down' buttons shift cities within a time zone if the        // clock is displayed, otherwise they tilt the earth        case KeyEvent.KEYCODE_DPAD_UP:            if (mDisplayClock) {                shiftWithinTimeZone(-1);            } else {                mClock.setCity(null);                if (!mDisplayWorldFlat) {                    mTiltAngle += 360.0f / 48.0f;                }            }            handled = true;            break;        case KeyEvent.KEYCODE_DPAD_DOWN:            if (mDisplayClock) {                shiftWithinTimeZone(1);            } else {                mClock.setCity(null);                if (!mDisplayWorldFlat) {                    mTiltAngle -= 360.0f / 48.0f;                }            }            handled = true;            break;        // The center key stops the earth's rotation, then toggles between the        // round and flat views of the earth        case KeyEvent.KEYCODE_DPAD_CENTER:            if ((!mDisplayWorldFlat && mRotVelocity == 0.0f) ||                (mDisplayWorldFlat && mWrapVelocity == 0.0f)) {                mDisplayWorldFlat = !mDisplayWorldFlat;            } else {                if (mDisplayWorldFlat) {                    mWrapVelocity = 0.0f;                } else {                    mRotVelocity = 0.0f;                }            }            handled = true;            break;        // The 'L' key toggles the city lights        case KeyEvent.KEYCODE_L:            if (!mAlphaKeySet && !mDisplayWorldFlat) {                mDisplayLights = !mDisplayLights;                handled = true;            }            break;        // The 'W' key toggles the earth (just for fun)        case KeyEvent.KEYCODE_W:            if (!mAlphaKeySet && !mDisplayWorldFlat) {                mDisplayWorld = !mDisplayWorld;                handled = true;            }            break;        // The 'A' key toggles the atmosphere        case KeyEvent.KEYCODE_A:            if (!mAlphaKeySet && !mDisplayWorldFlat) {                mDisplayAtmosphere = !mDisplayAtmosphere;                handled = true;            }            break;        // The '2' key zooms out        case KeyEvent.KEYCODE_2:            if (!mAlphaKeySet && !mDisplayWorldFlat) {                mGLView.zoom(-2);                handled = true;            }            break;        // The '8' key zooms in        case KeyEvent.KEYCODE_8:            if (!mAlphaKeySet && !mDisplayWorldFlat) {                mGLView.zoom(2);                handled = true;            }            break;        }        // Handle letters in city names        if (!handled && mAlphaKeySet) {            switch (keyCode) {            // Add a letter to the city name prefix            case KeyEvent.KEYCODE_A:            case KeyEvent.KEYCODE_B:            case KeyEvent.KEYCODE_C:            case KeyEvent.KEYCODE_D:            case KeyEvent.KEYCODE_E:            case KeyEvent.KEYCODE_F:            case KeyEvent.KEYCODE_G:            case KeyEvent.KEYCODE_H:            case KeyEvent.KEYCODE_I:            case KeyEvent.KEYCODE_J:            case KeyEvent.KEYCODE_K:            case KeyEvent.KEYCODE_L:            case KeyEvent.KEYCODE_M:            case KeyEvent.KEYCODE_N:            case KeyEvent.KEYCODE_O:            case KeyEvent.KEYCODE_P:            case KeyEvent.KEYCODE_Q:            case KeyEvent.KEYCODE_R:            case KeyEvent.KEYCODE_S:            case KeyEvent.KEYCODE_T:            case KeyEvent.KEYCODE_U:            case KeyEvent.KEYCODE_V:            case KeyEvent.KEYCODE_W:            case KeyEvent.KEYCODE_X:            case KeyEvent.KEYCODE_Y:            case KeyEvent.KEYCODE_Z:                char c = (char)(keyCode - KeyEvent.KEYCODE_A + 'A');                if (hasMatches(mCityName + c)) {                    mCityName += c;                    shiftByName();                }                handled = true;                break;            // Remove a letter from the city name prefix            case KeyEvent.KEYCODE_DEL:                if (mCityName.length() > 0) {                    mCityName = mCityName.substring(0, mCityName.length() - 1);                    shiftByName();                } else {                    clearCityMatches();                }                handled = true;                break;            // Clear the city name prefix            case KeyEvent.KEYCODE_ENTER:                clearCityMatches();                handled = true;                break;            }        }        boolean drawing = (mClockShowing ||            ((mGLView != null) && (mGLView.hasMessages())));        this.setWillNotDraw(!drawing);        // Let the system handle other keypresses        if (!handled) {            return super.onKeyDown(keyCode, event);        }        return true;    }    /**     * Initialize OpenGL ES drawing.     */    private synchronized void init(GL10 gl) {        mGLView = new GLView();        mGLView.setNearFrustum(5.0f);        mGLView.setFarFrustum(50.0f);        mGLView.setLightModelAmbientIntensity(0.225f);        mGLView.setAmbientIntensity(0.0f);        mGLView.setDiffuseIntensity(1.5f);        mGLView.setDiffuseColor(SUNLIGHT_COLOR);        mGLView.setSpecularIntensity(0.0f);        mGLView.setSpecularColor(SUNLIGHT_COLOR);        if (PERFORM_DEPTH_TEST) {            gl.glEnable(GL10.GL_DEPTH_TEST);        }        gl.glDisable(GL10.GL_SCISSOR_TEST);        gl.glClearColor(0, 0, 0, 1);        gl.glHint(GL10.GL_POINT_SMOOTH_HINT, GL10.GL_NICEST);        mInitialized = true;    }    /**     * Computes the vector from the center of the earth to the sun for a     * particular moment in time.     */    private void computeSunDirection() {        mSunCal.setTimeInMillis(System.currentTimeMillis());        int day = mSunCal.get(Calendar.DAY_OF_YEAR);        int seconds = 3600 * mSunCal.get(Calendar.HOUR_OF_DAY) +            60 * mSunCal.get(Calendar.MINUTE) + mSunCal.get(Calendar.SECOND);        day += (float) seconds / SECONDS_PER_DAY;        // Approximate declination of the sun, changes sinusoidally        // during the year.  The winter solstice occurs 10 days before        // the start of the year.        float decl = (float) (EARTH_INCLINATION *            Math.cos(Shape.TWO_PI * (day + 10) / 365.0));        // Subsolar latitude, convert from (-PI/2, PI/2) -> (0, PI) form        float phi = decl + Shape.PI_OVER_TWO;        // Subsolar longitude        float theta = Shape.TWO_PI * seconds / SECONDS_PER_DAY;        float sinPhi = (float) Math.sin(phi);        float cosPhi = (float) Math.cos(phi);        float sinTheta = (float) Math.sin(theta);        float cosTheta = (float) Math.cos(theta);        // Convert from polar to rectangular coordinates        float x = cosTheta * sinPhi;        float y = cosPhi;        float z = sinTheta * sinPhi;        // Directional light -> w == 0        mLightDir[0] = x;        mLightDir[1] = y;        mLightDir[2] = z;        mLightDir[3] = 0.0f;    }    /**     * Computes the approximate spherical distance between two     * (latitude, longitude) coordinates.     */    private float distance(float lat1, float lon1,                           float lat2, float lon2) {        lat1 *= Shape.DEGREES_TO_RADIANS;        lat2 *= Shape.DEGREES_TO_RADIANS;        lon1 *= Shape.DEGREES_TO_RADIANS;        lon2 *= Shape.DEGREES_TO_RADIANS;        float r = 6371.0f; // Earth's radius in km        float dlat = lat2 - lat1;        float dlon = lon2 - lon1;        double sinlat2 = Math.sin(dlat / 2.0f);        sinlat2 *= sinlat2;        double sinlon2 = Math.sin(dlon / 2.0f);        sinlon2 *= sinlon2;        double a = sinlat2 + Math.cos(lat1) * Math.cos(lat2) * sinlon2;        double c = 2.0 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));        return (float) (r * c);    }    /**     * Locates the closest city to the currently displayed center point,     * optionally restricting the search to cities within a given time zone.     */    private void locateCity(boolean useOffset, float offset) {        float mindist = Float.MAX_VALUE;        int minidx = -1;        for (int i = 0; i < mCities.size(); i++) {            City city = mCities.get(i);            if (useOffset && !tzEqual(getOffset(city), offset)) {                continue;            }            float dist = distance(city.getLatitude(), city.getLongitude(),                mTiltAngle, mRotAngle - 90.0f);            if (dist < mindist) {                mindist = dist;                minidx = i;            }        }        mCityIndex = minidx;    }    /**     * Animates the earth to be centered at the current city.     */    private void goToCity() {        City city = mCities.get(mCityIndex);        float dist = distance(city.getLatitude(), city.getLongitude(),            mTiltAngle, mRotAngle - 90.0f);        mFlyToCity = true;        mCityFlyStartTime = System.currentTimeMillis();        mCityFlightTime = dist / 5.0f; // 5000 km/sec        mRotAngleStart = mRotAngle;        mRotAngleDest = city.getLongitude() + 90;        if (mRotAngleDest - mRotAngleStart > 180.0f) {            mRotAngleDest -= 360.0f;        } else if (mRotAngleStart - mRotAngleDest > 180.0f) {            mRotAngleDest += 360.0f;        }        mTiltAngleStart = mTiltAngle;        mTiltAngleDest = city.getLatitude();        mRotVelocity = 0.0f;    }    /**     * Returns a linearly interpolated value between two values.     */    private float lerp(float a, float b, float lerp) {        return a + (b - a)*lerp;    }    /**     * Draws the city lights, using a clip plane to restrict the lights     * to the night side of the earth.     */    private void drawCityLights(GL10 gl, float brightness) {        gl.glEnable(GL10.GL_POINT_SMOOTH);        gl.glDisable(GL10.GL_DEPTH_TEST);        gl.glDisable(GL10.GL_LIGHTING);        gl.glDisable(GL10.GL_DITHER);        gl.glShadeModel(GL10.GL_FLAT);        gl.glEnable(GL10.GL_BLEND);        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);        gl.glPointSize(1.0f);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -