AutoTextView实现文字自动翻转效果,移动app开发

本文介绍如何在Android应用中使用自定义的AutoTextView组件来创建文字自动翻转滚动的效果。通过设置动画、调整字体大小和颜色,以及处理布局,实现了上下翻滚的视觉效果。同时,文章提供了attrs.xml配置和Activity的相关代码,帮助开发者理解并实现类似功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TextView t = new TextView(mContext);

// t.setGravity(Gravity.CENTER);

t.setTextSize(mHeight);

// t.setTextColor(Resources.getSystem().getColor(android.R.color.black));

t.setTextColor(mContext.getResources().getColor(R.color.white));

t.setTextSize(13);

// t.setGravity(Gravity.CENTER_VERTICAL);

t.setPadding(0,15,0,15);

t.setMaxLines(1);

t.setEllipsize(TextUtils.TruncateAt.END);

return t;

}

//定义动作,向下滚动翻页

public void previous() {

if (getInAnimation() != mInDown) {

setInAnimation(mInDown);

}

if (getOutAnimation() != mOutDown) {

setOutAnimation(mOutDown);

}

}

//定义动作,向上滚动翻页

public void next() {

if (getInAnimation() != mInUp) {

setInAnimation(mInUp);

}

if (getOutAnimation() != mOutUp) {

setOutAnimation(mOutUp);

}

}

class Rotate3dAnimation extends Animation {

private final float mFromDegrees;

private final float mToDegrees;

private float mCenterX;

private float mCenterY;

private final boolean mTurnIn;

private final boolean mTurnUp;

private Camera mCamera;

public Rotate3dAnimation(float fromDegrees, float toDegrees, boolean turnIn, boolean turnUp) {

mFromDegrees = fromDegrees;

mToDegrees = toDegrees;

mTurnIn = turnIn;

mTurnUp = turnUp;

}

@Override

public void initialize(int width, int height, int parentWidth, int parentHeight) {

super.initialize(width, height, parentWidth, parentHeight);

mCamera = new Camera();

mCenterY = getHeight() / 2;

mCenterX = getWidth() / 2;

}

@Override

protected void applyTransformation(float interpolatedTime, Transformation t) {

final float fromDegrees = mFromDegrees;

float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);

final float centerX = mCenterX;

final float centerY = mCenterY;

final Camera camera = mCamera;

final int derection = mTurnUp ? 1 : -1;

final Matrix matrix = t.getMatrix();

camera.save();

if (mTurnIn) {

camera.translate(0.0f, derection * mCenterY * (interpolatedTime - 1.0f), 0.0f);

} else {

camera.translate(0.0f, derection * mCenterY * (interpolatedTime), 0.0f);

}

camera.rotateX(degrees);

camera.getMatrix(matrix);

camera.restore();

matrix.preTranslate(-centerX, -centerY);

matrix.postTranslate(centerX, centerY);

}

}

}

attrs.xml

xml

<com.xx.xx.view.AutoTextView

android:id="@+id/atv_auto_qy"

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_marginTop="@dimen/margin_5" />

activity

private void showQyInfo() {

// qyPowers.clear();

isShowQyView = true;

mQyInfoView.setVisibility(View.VISIBLE);

if(timer == null){

String[] qyinfo = context.getResources().getStringArray(R.array.qy_power);

qyPowers = Arrays.asList(qyinfo);

timer = new Timer();

timer.schedule(timerTask, 100, 3000);

powerPosition = 0;

}

}

//计时

TimerTask timerTask = new TimerTask() {

@Override

public void run() {

if(isShowQyView) {

Message message = new Message();

message.what = 0x001;

handler.sendMessage(message);

}

}

};

final Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case 0x001:

atvQy.next();

atvQy.setText(qyPowers.get(powerPosition));

powerPosition ++;

最后

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长。而不成体系的学习效果低效漫长且无助。时间久了,付出巨大的时间成本和努力,没有看到应有的效果,会气馁是再正常不过的。

所以学习一定要找到最适合自己的方式,有一个思路方法,不然不止浪费时间,更可能把未来发展都一起耽误了。

如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。以上知识笔记全部免费分享,如有需要获取知识笔记的朋友,可以点击我的GitHub免费领取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值