加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 教程 > 正文

Android UI模拟器启动界面动画效果的简单达成

发布时间:2021-11-24 16:35:12 所属栏目:教程 来源:互联网
导读:关键点: 1.自定义控件。 2.Shader渲染的使用。 上图,见代码。 screen animation main.xml [xhtml] ?xml version=1.0 encoding=utf-8? LinearLayout xmlns:Android=http://schemas.android.com/apk/res/android android:orientation=vertical android:layou

关键点:
 
1.自定义控件。
 
2.Shader渲染的使用。
 
上图,见代码。
 
screen animation
 
main.xml
 
[xhtml]
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical" android:layout_width="fill_parent"  
    android:layout_height="fill_parent" android:layout_gravity="center_vertical">  
    <com.example.android.MaskedTextView  
        android:id="@+id/text"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:gravity="center_vertical"  
    />  
</LinearLayout>  
Activity.class
 
[java]
package com.example.android;  
import android.app.Activity;  
import android.os.Bundle;  
public class MaskedTextViewActivity extends Activity {  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        ((MaskedTextView) findViewById(R.id.text)).setStart(true);  
    }  
}  
自定义View
 
[java]
package com.example.android;  
import android.content.Context;  
import android.graphics.Canvas;  
import android.graphics.Color;  
import android.graphics.LinearGradient;  
import android.graphics.Matrix;  
import android.graphics.Paint;  
import android.graphics.Shader;  
import android.util.AttributeSet;  
import android.view.View;  
/** 此代码源于David_Zhang,由Sodino注释,欢迎挑错。 */  
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(26);  
        // 创建一个线性梯度着色器   
        // 参数中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);  
        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(getContext().getString(R.string.msg), 0, 25, txtPaint);  
    }  
}  
 

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读