Back to project page HexNanoController_Android.
The source code is released under:
Code license GNU GPL v2 http://www.gnu.org/licenses/gpl.html Content license CC BY-NC-SA 4.0 http://creativecommons.org/licenses/by-nc-sa/4.0/
If you think the Android project HexNanoController_Android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.hexairbot.hexmini.ui; /* ww w. j av a2s. c o m*/ import javax.microedition.khronos.opengles.GL10; import android.content.res.Resources; import android.graphics.Canvas; import com.hexairbot.hexmini.ui.gl.GLSprite; public class ToggleButton extends Button { private boolean checked; private float lightAlpha; private long prevNano; private int alphaCoef; private GLSprite spriteGlow; private GLSprite spriteCheckedNormal; private GLSprite spriteCheckedPressed; public ToggleButton(Resources resources, int normalBitmapId, int pressedBitmapId, int checkedNormalBitmapId, int checkedPressedBitmapId, int glowBitmapId, Align align) { super(resources, normalBitmapId, pressedBitmapId, align); spriteGlow = new GLSprite(resources, glowBitmapId); spriteCheckedNormal = new GLSprite(resources, checkedNormalBitmapId); spriteCheckedPressed = new GLSprite(resources, checkedPressedBitmapId); lightAlpha = 1.0f; alphaCoef = -1; checked = false; } @Override public void init(GL10 gl, int program) { super.init(gl, program); spriteGlow.init(gl, program); spriteCheckedNormal.init(gl, program); spriteCheckedPressed.init(gl, program); } @Override public void surfaceChanged(GL10 gl, int width, int height) { super.surfaceChanged(gl, width, height); spriteGlow.onSurfaceChanged(gl, width, height); spriteCheckedNormal.onSurfaceChanged(gl, width, height); spriteCheckedPressed.onSurfaceChanged(gl, width, height); } @Override public void draw(GL10 gl) { if (bounds != null && visible) { if (checked) { long nano = System.nanoTime(); if (nano - prevNano > 100) { prevNano = nano; lightAlpha += 0.05 * alphaCoef; if (lightAlpha < 0) { alphaCoef = 1; } else if (lightAlpha > 1) { alphaCoef = -1; } spriteGlow.setAlpha(lightAlpha); } if (isPressed) { spriteCheckedPressed.onDraw(gl, bounds.left, surfaceHeight - bounds.top - spritePressed.height); } else { spriteCheckedNormal.onDraw(gl, bounds.left, surfaceHeight - bounds.top - spritePressed.height); } spriteGlow.onDraw(gl, bounds.left, surfaceHeight - bounds.top - spriteGlow.height); } else { if (isPressed) { spritePressed.onDraw(gl, bounds.left, surfaceHeight - bounds.top - spriteNormal.height); } else { spriteNormal.onDraw(gl, bounds.left, surfaceHeight - bounds.top - spriteNormal.height); } } } } @Override public void draw(Canvas canvas) { if (bounds != null && visible) { if (checked) { spritePressed.onDraw(canvas, bounds.left, bounds.top); } else { spriteNormal.onDraw(canvas, bounds.left, bounds.top); } } } public void setChecked(boolean checked) { this.checked = checked; } @Override public void setViewAndProjectionMatrices(float[] vMatrix, float[] projMatrix) { super.setViewAndProjectionMatrices(vMatrix, projMatrix); spriteGlow.setViewAndProjectionMatrices(vMatrix, projMatrix); spriteCheckedNormal.setViewAndProjectionMatrices(vMatrix, projMatrix); spriteCheckedPressed.setViewAndProjectionMatrices(vMatrix, projMatrix); } }