zoukankan      html  css  js  c++  java
  • 82、文字混动效果

    第一种方式实现:ListView + Timer  ,简单,但是效果生硬。

    <ListView
            android:id="@+id/lv_news"
            android:layout_width="wrap_content"
            android:layout_height="0dip"
            android:fadeScrollbars="true"
            android:layout_alignBottom="@id/txt_home_news_ico"
            android:layout_alignTop="@id/txt_home_news_ico"
            android:layout_marginLeft="10dp"
            android:cacheColorHint="#00000000"
            android:divider="@null"
            android:layout_toRightOf="@id/txt_home_news_ico"
            android:background="@color/transparent"
            android:scrollbars="none" />
     1 private ListView lv_news = null;
     2 private int myIndex = 0;
     3 
     4 *******   省略
     5 
     6 if (listNewsAll.size() > 1) {
     7             new Timer().schedule(new TimerTask() {
     8                 @Override
     9                 public void run() {
    11                     myIndex += 1;
    14                     if (myIndex >= listNewsAll.size()) {
    15                         myIndex = 0;
    16                     }
    18                     lv_news.smoothScrollToPositionFromTop (myIndex, 2);
    20                 }
    21             }, 0, 2000);
    22         }
    23     }

    第二种方式实现:自定义控件 + handler。 有动画效果。

    import android.content.Context;
    import android.graphics.Camera;
    import android.graphics.Color;
    import android.graphics.Matrix;
    import android.util.AttributeSet;
    import android.view.Gravity;
    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;
    
    
    /**
     * 垂直翻滚
     */
    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);
            // TODO Auto-generated constructor stub
        }
    
        public AutoTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
            // TODO Auto-generated constructor stub
           // TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.auto3d);
            //mHeight = a.getDimension(R.styleable.auto3d_textSize, 36);
            mHeight = 20;
         //   a.recycle();
            mContext = context;
            init();
        }
    
        private void init() {
            // TODO Auto-generated method stub
            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(300);
            rotation.setFillAfter(false);
            rotation.setInterpolator(new AccelerateInterpolator());
            return rotation;
        }
    
        public void setData() {
    
        }
    
        //这里返回的TextView,就是我们看到的View
        @Override
        public View makeView() {
            // TODO Auto-generated method stub
            TextView t = new TextView(mContext);
            t.setGravity(Gravity.CENTER);
            t.setTextSize(mHeight);
            t.setMaxLines(2);
            t.setPadding(0, 5, 0, 5);
            //设置文字颜色
            t.setTextColor(Color.WHITE);
            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);
            }
        }
    }
    <com.dr.mk.project.txt01.AutoTextView
                android:id="@+id/switcher02"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
     1 public class TxtMainActivity extends Activity {
     2 
     3     private AutoTextView mTextView02;
     4     final Handler handler = new Handler();
     5     // 自定义信息条数
     6     private static int sCount = 0;
     7     private List<String> str = new ArrayList<String>();
     8 
     9     @Override
    10     protected void onCreate(Bundle savedInstanceState) {
    11         super.onCreate(savedInstanceState);
    12 
    13         setContentView(R.layout.activity_txt_fan_zhuan);
    14 
    15         init();
    16     }
    17 
    18     private void init() {
    19         //垂直滚动
    20         // 初始化数据
    21         str.add("信息1");
    22         str.add("信息2");
    23         str.add("信息3");
    24         sCount = str.size();
    25         mTextView02 = (AutoTextView) findViewById(R.id.switcher02);
    26         mTextView02.setText(str.get(0));
    27         //启动计时器
    28         handler.postDelayed(runnable, 3000);
    29         //handler.removeCallbacks(runnable);// 关闭定时器处理
    30     }
    31 
    32     Runnable runnable = new Runnable() {
    33         @Override
    34         public void run() {
    35             // 在此处添加执行的代码
    36             mTextView02.next();
    37             sCount++;
    38             if(sCount>=Integer.MAX_VALUE) {
    39                 sCount = str.size();
    40             }
    41             mTextView02.setText(str.get(sCount % (str.size())));
    42             if (str.size()>1) {
    43                 handler.postDelayed(this, 2000);// 50是延时时长
    44             }
    45 
    46         }
    47     };
    48 
    49 }
  • 相关阅读:
    mysql修改数据表名
    HDU 5742 It's All In The Mind (贪心)
    HDU 5752 Sqrt Bo (数论)
    HDU 5753 Permutation Bo (推导 or 打表找规律)
    HDU 5762 Teacher Bo (暴力)
    HDU 5754 Life Winner Bo (博弈)
    CodeForces 455C Civilization (并查集+树的直径)
    CodeForces 455B A Lot of Games (博弈论)
    CodeForces 455A Boredom (DP)
    HDU 4861 Couple doubi (数论 or 打表找规律)
  • 原文地址:https://www.cnblogs.com/androidsj/p/5377502.html
Copyright © 2011-2022 走看看