直播源码网站,实现文字自动翻转效果
直播源码网站,实现文字自动翻转效果的相关代码
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> |
以上就是直播源码网站,实现文字自动翻转效果的相关代码, 更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现