求Android开机时文字动画效果源码

jinmingyuan 2011-08-16 10:48:24
谁有Android开机时文字动画效果源码,就是文字有闪电一般效果,划过一条直线
知道是两张图片叠加的,我需要源码
...全文
598 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
android_newbird 2011-08-24
  • 打赏
  • 举报
回复
源码是C++的,在bootanimation.cpp中,有个android函数,我贴出来,你自己看
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;
}
jinmingyuan 2011-08-16
  • 打赏
  • 举报
回复
如果有好的回帖,可以帮到我的话,帖肯定是会结的。
六百万 2011-08-16
  • 打赏
  • 举报
回复
建议LZ先学会结贴吧,
看到的兄弟们,不要再支招了!
jinmingyuan 2011-08-16
  • 打赏
  • 举报
回复
可是我看网上说Android模拟器开机时文字闪动就是用两张图片叠加生成的,一个镂空,一个执行动画啊
如果我想那么做应该怎么做呢?
-droidcoffee- 2011-08-16
  • 打赏
  • 举报
回复

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

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧