直播源码网站,实现文字自动翻转效果

直播源码网站,实现文字自动翻转效果的相关代码

AutoTextView

1
package com.jky.mobilebzt.view;<br> <br>import android.content.Context;<br>import android.content.res.TypedArray;<br>import android.graphics.Camera;<br>import android.graphics.Matrix;<br>import android.text.TextUtils;<br>import android.util.AttributeSet;<br>import android.view.View;<br>import android.view.animation.AccelerateInterpolator;<br>import android.view.animation.Animation;<br>import android.view.animation.Transformation;<br>import android.widget.TextSwitcher;<br>import android.widget.TextView;<br>import android.widget.ViewSwitcher;<br> <br>import com.jky.mobilebzt.R;<br> <br> <br>public class AutoTextView extends TextSwitcher implements<br>        ViewSwitcher.ViewFactory {<br> <br>    private float mHeight;<br>    private Context mContext;<br>    //mInUp,mOutUp分别构成向下翻页的进出动画<br>    private Rotate3dAnimation mInUp;<br>    private Rotate3dAnimation mOutUp;<br> <br>    //mInDown,mOutDown分别构成向下翻页的进出动画<br>    private Rotate3dAnimation mInDown;<br>    private Rotate3dAnimation mOutDown;<br> <br>    public AutoTextView(Context context) {<br>        this(context, null);<br>    }<br> <br>    public AutoTextView(Context context, AttributeSet attrs) {<br>        super(context, attrs);<br>        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.auto3d);<br>        mHeight = a.getDimension(R.styleable.auto3d_textSize, 36);<br>        a.recycle();<br>        mContext = context;<br>        init();<br>    }<br> <br>    private void init() {<br>        setFactory(this);<br>        mInUp = createAnim(-90, 0, true, true);<br>        mOutUp = createAnim(0, 90, false, true);<br>        mInDown = createAnim(90, 0, true, false);<br>        mOutDown = createAnim(0, -90, false, false);<br>        //TextSwitcher主要用于文件切换,比如 从文字A 切换到 文字 B,<br>        //setInAnimation()后,A将执行inAnimation,<br>        //setOutAnimation()后,B将执行OutAnimation<br> <br>        //初始化翻转<br>//        setInAnimation(mInUp);<br>//        setOutAnimation(mOutUp);<br>    }<br> <br>    private Rotate3dAnimation createAnim(float start, float end, boolean turnIn, boolean turnUp) {<br>        final Rotate3dAnimation rotation = new Rotate3dAnimation(start, end, turnIn, turnUp);<br>        rotation.setDuration(800);<br>        rotation.setFillAfter(false);<br>        rotation.setInterpolator(new AccelerateInterpolator());<br>        return rotation;<br>    }<br> <br>    //这里返回的TextView,就是我们看到的View<br>    @Override<br>    public View makeView() {<br>        TextView t = new TextView(mContext);<br>//        t.setGravity(Gravity.CENTER);<br>        t.setTextSize(mHeight);<br>//        t.setTextColor(Resources.getSystem().getColor(android.R.color.black));<br>        t.setTextColor(mContext.getResources().getColor(R.color.white));<br>        t.setTextSize(13);<br>//        t.setGravity(Gravity.CENTER_VERTICAL);<br>        t.setPadding(0,15,0,15);<br>        t.setMaxLines(1);<br>        t.setEllipsize(TextUtils.TruncateAt.END);<br>        return t;<br>    }<br> <br>    //定义动作,向下滚动翻页<br>    public void previous() {<br>        if (getInAnimation() != mInDown) {<br>            setInAnimation(mInDown);<br>        }<br>        if (getOutAnimation() != mOutDown) {<br>            setOutAnimation(mOutDown);<br>        }<br>    }<br> <br>    //定义动作,向上滚动翻页<br>    public void next() {<br>        if (getInAnimation() != mInUp) {<br>            setInAnimation(mInUp);<br>        }<br>        if (getOutAnimation() != mOutUp) {<br>            setOutAnimation(mOutUp);<br>        }<br>    }<br> <br>    class Rotate3dAnimation extends Animation {<br>        private final float mFromDegrees;<br>        private final float mToDegrees;<br>        private float mCenterX;<br>        private float mCenterY;<br>        private final boolean mTurnIn;<br>        private final boolean mTurnUp;<br>        private Camera mCamera;<br> <br>        public Rotate3dAnimation(float fromDegrees, float toDegrees, boolean turnIn, boolean turnUp) {<br>            mFromDegrees = fromDegrees;<br>            mToDegrees = toDegrees;<br>            mTurnIn = turnIn;<br>            mTurnUp = turnUp;<br>        }<br> <br>        @Override<br>        public void initialize(int width, int height, int parentWidth, int parentHeight) {<br>            super.initialize(width, height, parentWidth, parentHeight);<br>            mCamera = new Camera();<br>            mCenterY = getHeight() / 2;<br>            mCenterX = getWidth() / 2;<br>        }<br> <br>        @Override<br>        protected void applyTransformation(float interpolatedTime, Transformation t) {<br>            final float fromDegrees = mFromDegrees;<br>            float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);<br> <br>            final float centerX = mCenterX;<br>            final float centerY = mCenterY;<br>            final Camera camera = mCamera;<br>            final int derection = mTurnUp ? 1 : -1;<br> <br>            final Matrix matrix = t.getMatrix();<br> <br>            camera.save();<br>            if (mTurnIn) {<br>                camera.translate(0.0f, derection * mCenterY * (interpolatedTime - 1.0f), 0.0f);<br>            } else {<br>                camera.translate(0.0f, derection * mCenterY * (interpolatedTime), 0.0f);<br>            }<br>            camera.rotateX(degrees);<br>            camera.getMatrix(matrix);<br>            camera.restore();<br> <br>            matrix.preTranslate(-centerX, -centerY);<br>            matrix.postTranslate(centerX, centerY);<br>        }<br>    }<br>}

 

attrs.xml

 

1
   <declare-styleable name="auto3d"><br>        <attr name="textSize" format="dimension" /><br>    </declare-styleable>

 

xml

1
<br>        <com.xx.xx.view.AutoTextView<br>                    android:id="@+id/atv_auto_qy"<br>                    android:layout_width="match_parent"<br>                    android:layout_height="wrap_content"<br>                    android:layout_marginTop="@dimen/margin_5" />

 

activity

 

1
<br>    private void showQyInfo() {<br>//        qyPowers.clear();<br> <br>        isShowQyView = true;<br>        mQyInfoView.setVisibility(View.VISIBLE);<br>        if(timer == null){<br>            String[] qyinfo = context.getResources().getStringArray(R.array.qy_power);<br>            qyPowers = Arrays.asList(qyinfo);<br>            timer = new Timer();<br>            timer.schedule(timerTask, 100, 3000);<br>            powerPosition = 0;<br>        }<br>    }<br> <br>    //计时<br>    TimerTask timerTask = new TimerTask() {<br>        @Override<br>        public void run() {<br> <br>            if(isShowQyView) {<br>                Message message = new Message();<br>                message.what = 0x001;<br>                handler.sendMessage(message);<br>            }<br>        }<br>    };<br>    final Handler handler = new Handler() {<br>        @Override<br>        public void handleMessage(Message msg) {<br>            switch (msg.what) {<br>                case 0x001:<br>                    atvQy.next();<br>                    atvQy.setText(qyPowers.get(powerPosition));<br>                    powerPosition ++;<br>                    powerPosition = powerPosition % 3;<br> <br>            }<br>        }<br> <br> <br>    };

 

strings.xml

1
<br><array name="qy_power"><br>        <item>8000+本建筑行业标准在线查看</item><br>        <item>随时创建反馈,企业专家、云服务专家组、标准规范起草人为您解答</item><br>        <item>移动课堂专享课程免费学习</item><br>    </array>

 以上就是直播源码网站,实现文字自动翻转效果的相关代码, 更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(344)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示