`
phenom
  • 浏览: 408895 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

TextView 文字淡入效果

 
阅读更多
一个文本渐渐地从左到右的显示。
几步就可以了实现了。利用的是View的fade边缘。当然也可以自己画,可是没有成功。
直接上代码:
class FadeTextView extends TextView {

    long delta=70l; //步进时间
    int width=0;    //字符串宽度
    int widthPixels=0;  //字符串的显示宽度
    int wp=4;   //字符串的显示宽度步进

    public FadeTextView(Context context) {
        super(context);
        init();
    }

    public FadeTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray a=
            context.obtainStyledAttributes(
                attrs, R.styleable.FadeTextView);
        delta=(long) a.getInt(R.styleable.FadeTextView_fade_txt_delta, (int) delta);
        wp=a.getInt(R.styleable.FadeTextView_fade_txt_wp, wp);
        init();
    }

    public FadeTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        TypedArray a=
            context.obtainStyledAttributes(
                attrs, R.styleable.FadeTextView, defStyle, 0);
        delta=(long) a.getInt(R.styleable.FadeTextView_fade_txt_delta, (int) delta);
        wp=a.getInt(R.styleable.FadeTextView_fade_txt_wp, wp);
        init();
    }
//关于delta,wp这两个属性是在attrs.xml中配置的。动画显示的速度由这两个值控制,当然要加入时间的话,也是可以。以时间为第一选择,然后才是每次显示的宽度
    private void init() {
        setSingleLine(true);
        setHorizontalFadingEdgeEnabled(true);  //这两句才能显示出阴影效果。
        widthPixels=4;
        width=(int) getPaint().measureText(getText().toString());
        KeelLog.v("init.width:"+width+" getText().toString():"+getText().toString());
        postDelayed(mRunnable, delta);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        super.setText(text, type);
        init();
    }
//这个是最重要的方法,就是对TextView设置宽度,因为当一个TextView宽度不够显示出文本时,边缘会有阴影效果。当然还要设置单行的,否则是不行的。
    public void setWidthLength(int pixels) {
        setWidth(pixels);
    }

    Runnable mRunnable=new Runnable() {
        @Override
        public void run() {
            //KeelLog.d("update:"+widthPixels+" width:"+width);
            if (width>0&&widthPixels<width) {
                widthPixels+=wp;
                setWidthLength(widthPixels);
                postInvalidate();
                postDelayed(mRunnable, delta);
            } else {
                //removeCallbacks(mRunnable);
            }
        }
    };

}
attrs.xml
<declare-styleable name="FadeTextView">
        <attr name="fade_txt_delta" format="reference|integer"/>
        <attr name="fade_txt_wp" format="reference|integer"/>
    </declare-styleable>


如果使用xml,则不会产生阴影,而是... ,这可能要设置一些属性。
用java代码添加:
LinearLayout layout;//=new LinearLayout(this);
        layout=(LinearLayout) findViewById(R.id.layout);
        layout.setOrientation(LinearLayout.VERTICAL);
        layout.setBackgroundColor(R.color.holo_green_light);
        final FadeTextView textView=new FadeTextView(this);
        //textView.setWidthLength(8);
        LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        //layoutParams.gravity=Gravity.CENTER;
        textView.setTextSize(28);
        textView.setText("互联网电视");
        layout.addView(textView, layoutParams);
就可以看效果了。

View中的画阴影的代码:这段代码不起作用。就只能用上面的笨办法来淡入显示文本了。
int saveCount;
    int length=40;  //fade length
    float right;
    float top=0;
    float bottom;
    float fadingEdgeLength=25f;
    float rightFadeStrength=5f;
    public Paint paint;
    public Matrix matrix;
    public Shader shader;

    private void drawTxt(Canvas canvas) {
        /*setFadingEdgeLength(length);
        setHorizontalFadingEdgeEnabled(true);
        setFadeColor(Color.GREEN);*/
        right=getRight();
        bottom=getBottom();
        fadingEdgeLength=getHeight();
        saveCount=canvas.getSaveCount();

        int solidColor=getSolidColor();
        if (solidColor==0) {
            final int flags=Canvas.HAS_ALPHA_LAYER_SAVE_FLAG;

            canvas.saveLayer(right-length, top, right, bottom, null, flags);
        } else {
            setFadeColor(solidColor);
        }

        // Step 5, draw the fade effect and restore layers
        final Paint p=paint;
        final Matrix matrix=MyTextView.this.matrix;
        final Shader fade=shader;
        final float fadeHeight=fadingEdgeLength;

        matrix.setScale(1, fadeHeight*rightFadeStrength);
        matrix.postRotate(90);
        matrix.postTranslate(right, top);
        fade.setLocalMatrix(matrix);
        canvas.drawRect(right-length, top, right, bottom, p);

        KeelLog.d(VIEW_LOG_TAG, String.format("top:%f,right:%f,bottom:%f,(right-length):%f,fadingEdgeLength:%f", top, right, bottom, right-length, fadingEdgeLength));

        canvas.restoreToCount(saveCount);
    }
private void init() {
        setText(subText);
        right=getRight();
        bottom=getBottom();
        paint=new Paint();
        matrix=new Matrix();
        // use use a height of 1, and then wack the matrix each time we
        // actually use it.
        shader=new LinearGradient(0, 0, 0, 1, 0xFF000000, 0, Shader.TileMode.CLAMP);

        paint.setShader(shader);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
    }
其中两个重点是:canvas.saveLayer(right-length, top, right, bottom, null, flags); 遮罩层。就是阴影部分。

shader=new LinearGradient(0, 0, 0, 1, 0xFF000000, 0, Shader.TileMode.CLAMP);
        paint.setShader(shader);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));//填充方式,大概是中间空的,边缘较突出的
可是上面的代码画不出阴影。失望。
如果有同学用这段代码画出来了,希望回复。



分享到:
评论

相关推荐

    SecretTextView-使TextView具有淡入淡出效果.zip

    应用Secret 中的效果实现的文字淡入淡出的效果,不同的文字淡入淡出的效果、速度是不同的。项目地址:https://github.com/matthewrkula/SecretTextView效果图:如何使用SecretTextView继承了android.widget.TextView...

    Android自定义TextView实现动态的文字效果

    对于TextView,我们可以利用ObjectAnimator或ValueAnimator来改变其属性,如alpha(透明度)或scaleX/scaleY(缩放比例),从而实现文字的淡入淡出、放大缩小等动画效果。 6. **XML布局中的自定义视图**: 完成...

    Android的TextView添加闪烁效果

    在Android开发中,为了增强用户界面的互动性和吸引力,开发者有时会希望在TextView中实现一些特殊效果,例如让文字闪烁。这个任务可以通过自定义View来完成,具体涉及到的知识点包括自定义View、线性渲染以及动画...

    Android例子源码20多种TextView文字效果例子

    本示例源码提供了20多种不同的TextView文字效果,帮助开发者在实际项目中实现更加丰富和吸引人的文本展示。这些效果可以增强用户体验,使应用的信息呈现更加生动和专业。以下是针对这些效果的详细解释: 1. **...

    TextView文字过长动画显示

    `TextView`动画实现的基本思路是通过改变`TextView`的`alpha`(透明度)属性或`scaleX`、`scaleY`(缩放比例)属性来达到文字渐显或渐隐的效果。这里,`TextViewHide`可能是一个示例项目,它展示了如何创建并应用...

    TextView自定义各种效果实现

    为TextView添加动画效果,如淡入淡出、闪烁、滑动等,可以增加用户的交互体验。可以利用Android的动画库,如`ObjectAnimator`或`ValueAnimator`,以及属性动画来实现。 3. **文字渐变色** 如果需要让TextView的...

    textview内容切换动画

    默认情况下,TextSwitcher提供了淡入淡出的动画效果,但开发者可以根据需求自定义动画。 **使用TextSwitcher:** 1. **布局文件中声明:** 在XML布局文件中,可以通过`&lt;android.widget.TextSwitcher&gt;`标签来声明一...

    TextView上下滚动实现通知效果

    此外,对于复杂的滚动效果,可能还需要考虑文本的淡入淡出、平滑滚动等动画效果,这可能需要用到`ObjectAnimator`或其他动画库。 最后,从提供的压缩包文件名"TextView上下滚动"来看,其中可能包含了实现这种滚动...

    安卓textView相关-TextView中文本的处理.rar

    9. **文本动画**:可以使用`TextAnimator`类为TextView添加动画效果,如淡入淡出、滚动等。 10. **动态加载文本**:在运行时动态更新TextView的内容,常用于获取网络数据后显示。 11. **富文本显示**:通过`...

    安卓textView相关-advanced-textview各种高级功能的textview.rar

    4. **动画效果**:高级TextView可能支持各种动画效果,如淡入淡出、滚动文本、闪烁等。这可以通过Android的Animation框架或属性动画API实现。 5. **可点击事件**:TextView不仅可以显示文本,还可以响应用户的触摸...

    android 文字淡出效果

    如果还需要实现淡入效果,可以创建一个`fade_in.xml`文件,将`fromAlpha`改为`0.0`,`toAlpha`改为`1.0`,然后在需要的地方应用。 通过以上步骤,你可以在Android应用中轻松实现文字的淡出效果。在实际开发中,还...

    android TextView详解

    `TextView`支持淡入淡出、滚动等动画效果,通过`Animation`或`TextAnimation`类实现。 9. **自定义样式** - 可以通过创建样式资源文件来统一设置`TextView`的样式,然后在多个地方复用。 - `android:...

    Android文字特效

    这使得在TextView中实现复杂动画变得轻松,比如文字打字机效果、飘雪效果等。 2. **Android-Text-Animation**:这个库提供了许多预定义的文字动画效果,如飞入、飞出、弹跳等,可以直接应用于TextView,简化开发...

    TextView动画效果

    本篇将详细讲解如何实现TextView的动画效果,以"TextView动画效果"为主题,基于作者hanks-zyh的开源项目HTextView。 首先,HTextView是对Android原生TextView的扩展,它提供了丰富的文字动画功能。源码简单易懂,...

    android滑动屏幕文字动态效果

    在动态文字效果中,我们可以结合`ValueAnimator`改变TextView的透明度,实现淡入淡出效果。 5. **GestureDetector**:为了响应用户的滑动操作,我们需要监听滑动事件。`GestureDetector`可以帮助我们捕获滑动、点击...

    Android有趣的textview与button特效

    4. **文本动画效果**:利用ObjectAnimator或PropertyAnimator,可以对TextView的alpha、scaleX、scaleY等属性进行动画操作,实现淡入淡出、放大缩小等特效。 其次,Button作为用户进行交互的主要组件,其特效设计...

    textView属性

    另外,`android:fadeScrollbars`可以控制滚动条淡入淡出效果。 11. **自定义字体** 通过`android:typeface`属性加载自定义字体,或者在代码中使用`Typeface`类加载并设置字体。 12. **触摸反馈** `android:...

    android-TextView-Animation

    在用户界面设计中,有时为了增加交互性和视觉吸引力,我们希望让TextView中的文字具有动态效果,比如随机动画。本项目"android-TextView-Animation"就是专注于实现这样的效果,使得TextView内部的文字能够产生美观的...

    Android应用源码之4.TextView控件学习.zip

    TextView支持多种动画效果,如淡入淡出、平移等,可以使用`TextSwitcher`或自定义动画实现。 9. **自定义字体** 可以通过加载本地字体文件或在线字体库,自定义TextView的字体。首先将字体文件放入res/font目录,...

    Android入门学习-TextView

    11. **动画效果**:通过Animation或Transition动画,可以为TextView添加淡入淡出、平移、缩放等动画效果。 12. **文字测量和布局**:TextView会根据文本内容自动计算宽度和高度,开发者可以通过`TextView.getPaint...

Global site tag (gtag.js) - Google Analytics