谁有Android开机时文字动画效果源码,就是文字有闪电一般效果,划过一条直线
知道是两张图片叠加的,我需要源码
知道是两张图片叠加的,我需要源码
解决方案 »
- android opengle es 学习资料共享
- 求助基于Android系统下的连连看的动态界面
- Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
- 关于短信备份sms格式恢复到手机的问题
- apk 安装到平板电脑后,能不能复制安装后的文件到其它机子上运行?
- 图片云存储API
- 求助:Android ListView分页加载时,第一页点击事件可用,第二页点事件不可用(点击就会异常退出)
- 百度地图api相关问题
- 新人求教,EditText输入的信息怎么显示
- Android RecyclerView底部一部分被半透明栏遮挡,最后一项会被挡住,希望滑动到最后一项之后可以再向上滑动一段距离有什么办法?
- java解压zip文件问题
- android调用系统的邮件程序
public class MaskedTextView extends View {
private Paint txtPaint;
/** 阴影渲染在X轴上的位移。 */
private float moveX = 0;
private boolean start = false;
/** 每次渲染的位移像素值。 */
private static final int MOVE_SPEEND = 1;
private void init() {
txtPaint = new Paint();
txtPaint.setColor(Color.GRAY);
txtPaint.setAntiAlias(true);
txtPaint.setTextSize(30);
// 创建一个线性梯度着色器
// 参数中colors的数组长度与positions的数组长度相对应<br/>
// 本例中初始化后相应的纯色位置如下(与平铺模式有关):<br/>
// Black: 200 * 0<br/>
// YELLOW: 200 * 0.3<br/>
// DKGRAY: 200 * 0.6<br/>
// WHITE: 200 * 1<br/>
// 最后一个参数为:着色器的颜色平铺模式。共有三种选择:<br/>
// 1.MIRROR: 颜色平铺从0→colors[i]→0,边缘过渡。
// 2.REPEAT: 颜色平铺从0→colors[i],边缘无过渡。
// 3.CLAMP:与边框着色有关。
// Shader shader = new LinearGradient(0, 0, 200, 0, new int[] {
// Color.BLACK, Color.YELLOW, Color.DKGRAY, Color.WHITE },
// new float[] { 0, 0.3f, 0.6f, 1 }, Shader.TileMode.MIRROR);
Shader shader = new LinearGradient(0, 0, 200, 0, new int[] {
Color.GRAY,Color.GRAY, Color.RED,Color.GRAY,Color.GRAY },
new float[] {0.4f ,0.4f, 0.5f,0.6f,0.6f }, Shader.TileMode.MIRROR);
txtPaint.setShader(shader);
}
/** 由xml实例化的UI组件在VM中是调用本构造函数生成新实例的。 */
public MaskedTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public void setStart(boolean start) {
this.start = start;
// 由UI主线程调用,开始渲染本UI组件。
invalidate();
}
protected void onDraw(Canvas canvas) {
moveX += MOVE_SPEEND;
Matrix matrix = new Matrix();
if (start) {
// 阴影渲染沿x轴向右移动dx像素,沿y轴向下移动0像素。
// 渲染的位移形成动画。
matrix.setTranslate(moveX, 0);
invalidate();
} else {
matrix.setTranslate(0, 0);
}
txtPaint.getShader().setLocalMatrix(matrix);
canvas.drawText(". . . . . . . . . . . . . . . . . . . . .", 0, 25, txtPaint);
}
}貌似不是图片叠加的吧? 就是一个view
如果我想那么做应该怎么做呢?
bool BootAnimation::android()
{
initTexture(&mAndroid[0], mAssets, "images/android-logo-mask.png");
initTexture(&mAndroid[1], mAssets, "images/android-logo-shine.png"); // clear screen
glShadeModel(GL_FLAT);
glDisable(GL_DITHER);
glDisable(GL_SCISSOR_TEST);
glClear(GL_COLOR_BUFFER_BIT);
eglSwapBuffers(mDisplay, mSurface); glEnable(GL_TEXTURE_2D);
glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); const GLint xc = (mWidth - mAndroid[0].w) / 2;
const GLint yc = (mHeight - mAndroid[0].h) / 2;
const Rect updateRect(xc, yc, xc + mAndroid[0].w, yc + mAndroid[0].h); // draw and update only what we need
mFlingerSurface->setSwapRectangle(updateRect); glScissor(updateRect.left, mHeight - updateRect.bottom, updateRect.width(),
updateRect.height()); // Blend state
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); const nsecs_t startTime = systemTime();
do {
nsecs_t now = systemTime();
double time = now - startTime;
float t = 4.0f * float(time / us2ns(16667)) / mAndroid[1].w;
GLint offset = (1 - (t - floorf(t))) * mAndroid[1].w;
GLint x = xc - offset; glDisable(GL_SCISSOR_TEST);
glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_SCISSOR_TEST);
glDisable(GL_BLEND);
glBindTexture(GL_TEXTURE_2D, mAndroid[1].name);
glDrawTexiOES(x, yc, 0, mAndroid[1].w, mAndroid[1].h);
glDrawTexiOES(x + mAndroid[1].w, yc, 0, mAndroid[1].w, mAndroid[1].h); glEnable(GL_BLEND);
glBindTexture(GL_TEXTURE_2D, mAndroid[0].name);
glDrawTexiOES(xc, yc, 0, mAndroid[0].w, mAndroid[0].h); EGLBoolean res = eglSwapBuffers(mDisplay, mSurface);
if (res == EGL_FALSE)
break; // 12fps: don't animate too fast to preserve CPU
const nsecs_t sleepTime = 83333 - ns2us(systemTime() - now);
if (sleepTime > 0)
usleep(sleepTime);
} while (!exitPending()); glDeleteTextures(1, &mAndroid[0].name);
glDeleteTextures(1, &mAndroid[1].name);
return false;
}