AutoTextView实现文字自动翻转效果
【摘要】
效果图如上
代码如下:
AutoTextView
package com.jky.mobilebzt.view; import android.content.Context;import android.content.res.TypedArray;import android.graphics.Camera;import ...
效果图如上
代码如下:
AutoTextView
-
package com.jky.mobilebzt.view;
-
-
import android.content.Context;
-
import android.content.res.TypedArray;
-
import android.graphics.Camera;
-
import android.graphics.Matrix;
-
import android.text.TextUtils;
-
import android.util.AttributeSet;
-
import android.view.View;
-
import android.view.animation.AccelerateInterpolator;
-
import android.view.animation.Animation;
-
import android.view.animation.Transformation;
-
import android.widget.TextSwitcher;
-
import android.widget.TextView;
-
import android.widget.ViewSwitcher;
-
-
import com.jky.mobilebzt.R;
-
-
-
public class AutoTextView extends TextSwitcher implements
-
ViewSwitcher.ViewFactory {
-
-
private float mHeight;
-
private Context mContext;
-
//mInUp,mOutUp分别构成向下翻页的进出动画
-
private Rotate3dAnimation mInUp;
-
private Rotate3dAnimation mOutUp;
-
-
//mInDown,mOutDown分别构成向下翻页的进出动画
-
private Rotate3dAnimation mInDown;
-
private Rotate3dAnimation mOutDown;
-
-
public AutoTextView(Context context) {
-
this(context, null);
-
}
-
-
public AutoTextView(Context context, AttributeSet attrs) {
-
super(context, attrs);
-
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.auto3d);
-
mHeight = a.getDimension(R.styleable.auto3d_textSize, 36);
-
a.recycle();
-
mContext = context;
-
init();
-
}
-
-
private void init() {
-
setFactory(this);
-
mInUp = createAnim(-90, 0, true, true);
-
mOutUp = createAnim(0, 90, false, true);
-
mInDown = createAnim(90, 0, true, false);
-
mOutDown = createAnim(0, -90, false, false);
-
//TextSwitcher主要用于文件切换,比如 从文字A 切换到 文字 B,
-
//setInAnimation()后,A将执行inAnimation,
-
//setOutAnimation()后,B将执行OutAnimation
-
-
//初始化翻转
-
// setInAnimation(mInUp);
-
// setOutAnimation(mOutUp);
-
}
-
-
private Rotate3dAnimation createAnim(float start, float end, boolean turnIn, boolean turnUp) {
-
final Rotate3dAnimation rotation = new Rotate3dAnimation(start, end, turnIn, turnUp);
-
rotation.setDuration(800);
-
rotation.setFillAfter(false);
-
rotation.setInterpolator(new AccelerateInterpolator());
-
return rotation;
-
}
-
-
//这里返回的TextView,就是我们看到的View
-
@Override
-
public View makeView() {
-
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
-
<declare-styleable name="auto3d">
-
<attr name="textSize" format="dimension" />
-
</declare-styleable>
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 ++;
-
powerPosition = powerPosition % 3;
-
-
}
-
}
-
-
-
};
strings.xml
-
<array name="qy_power">
-
<item>8000+本建筑行业标准在线查看</item>
-
<item>随时创建反馈,企业专家、云服务专家组、标准规范起草人为您解答</item>
-
<item>移动课堂专享课程免费学习</item>
-
</array>
文章来源: wukong.blog.csdn.net,作者:再见孙悟空_,版权归原作者所有,如需转载,请联系作者。
原文链接:wukong.blog.csdn.net/article/details/115464473
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)