Android中仿淘宝头条,自定义控件,向上滚动

来源:互联网 发布:前端页面性能优化方法 编辑:程序博客网 时间:2024/06/05 04:56

1效果图



2项目结构


3代码

自定义滑动控件UpDownTextView

package android.zhh.com.myfangtaobao2;import android.animation.Animator;import android.animation.AnimatorSet;import android.animation.ObjectAnimator;import android.content.Context;import android.graphics.Canvas;import android.text.TextUtils;import android.util.AttributeSet;import android.util.Log;import android.widget.TextView;/** * Created by sky on 2017/3/15. */public class UpDownTextView extends TextView implements Animator.AnimatorListener {    private static final String TAG = "UpDownTextView";    private static final int ANIMATION_DURATION = 200;    private float height;    private AnimatorSet mAnimatorStartSet;    private AnimatorSet mAnimatorEndSet;    private String mText;    public UpDownTextView(Context context) {        super(context);    }    public UpDownTextView(Context context, AttributeSet attrs) {        super(context, attrs);    }    /**     * 此方法就是获取view的高度     *     * @param canvas     */    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        height = getHeight();    }    /**     * --- 初始化向上脱离屏幕的动画效果 ---     */    private void initStartAnimation() {        ObjectAnimator translate = ObjectAnimator.ofFloat(this, "translationY", 0, -height);        ObjectAnimator alpha = ObjectAnimator.ofFloat(this, "alpha", 1f, 0f);        mAnimatorStartSet = new AnimatorSet();        mAnimatorStartSet.play(translate).with(alpha);        mAnimatorStartSet.setDuration(ANIMATION_DURATION);        mAnimatorStartSet.addListener(this);    }    /**     * --- 初始化从屏幕下面向上的动画效果 ---     */    private void initEndAnimation() {        //translationY 属性肯定要归为0,不然显示的内容就有偏移了;alpha 也是一样        ObjectAnimator translate = ObjectAnimator.ofFloat(this, "translationY", height, 0);        ObjectAnimator alpha = ObjectAnimator.ofFloat(this, "alpha", 0f, 1f);        mAnimatorEndSet = new AnimatorSet();        mAnimatorEndSet.play(translate).with(alpha);        mAnimatorEndSet.setDuration(ANIMATION_DURATION);        mAnimatorStartSet.addListener(this);    }    /**     * --- 设置内容 ---     **/    public void setText(String text) {        if (TextUtils.isEmpty(text)) {            Log.e(TAG, "--- 请确保text不为空 ---");            return;        }        mText = text;        if (null == mAnimatorStartSet) {            initStartAnimation();        }        mAnimatorStartSet.start();    }    @Override    public void onAnimationStart(Animator animator) {    }    @Override    public void onAnimationEnd(Animator animator) {        super.setText(mText);        if (null == mAnimatorEndSet) {            initEndAnimation();        }        mAnimatorEndSet.start();    }    @Override    public void onAnimationCancel(Animator animator) {    }    @Override    public void onAnimationRepeat(Animator animator) {    }}

MainActivity中:
package android.zhh.com.myfangtaobao2;import android.app.Activity;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Toast;import java.util.ArrayList;public class MainActivity extends Activity {    private UpDownTextView marquee;    private int TIME = 1000; //没执行一次所需要的时间    int index = 0;    private Handler handler = new Handler(){        public void handleMessage(Message msg){            switch (msg.what) {                case  1://                  index是全局的,判断小于list长度,防止数组越界异常                    if (index < getData().size()) {                        index++;                        if(index==getData().size()) {                            index=0;                        }                    }                    marquee.setText(getData().get(index)+"① ....." );                    Log.e("111", "index" + index);//                  自己调自己                    handler.sendEmptyMessageDelayed(1, TIME);                    break;            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        myOnclick();    }    private void initView(){        marquee = (UpDownTextView)findViewById(R.id.marquee);        handler.sendEmptyMessage(1);    }    private void myOnclick(){        marquee.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                  Toast.makeText(MainActivity.this, ">>>"+marquee.getText(), Toast.LENGTH_SHORT).show();            }        });    }    private ArrayList<String> getData(){        ArrayList<String>list = new ArrayList<>();        list.add("1111111111");        list.add("2222222222");        list.add("3333333333");        return list;    }}
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity"    android:orientation="horizontal"    >    <LinearLayout        android:layout_width="50dp"        android:layout_height="50dp"        android:background="#B27DB5"        android:gravity="center">        <TextView            android:layout_width="50dp"            android:layout_height="50dp"            android:text="我的\n头条"            android:textColor="#FFFFFF"            android:textSize="16sp"            android:gravity="center"            />    </LinearLayout>    <LinearLayout        android:id="@+id/lln"        android:layout_width="match_parent"        android:layout_height="50dp"        android:background="#ff82ab"        android:gravity="center_vertical"        android:orientation="vertical">        <android.zhh.com.myfangtaobao2.UpDownTextView            android:id="@+id/marquee"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginLeft="3dp"            android:layout_marginTop="3dp"            android:singleLine="true"            android:text=" "            android:textColor="@android:color/black"            />    </LinearLayout></LinearLayout>
源码下载:
http://download.csdn.net/detail/zhaihaohao1/9781892
参考博客:
http://www.jianshu.com/p/1a825d97c47a


0 0
原创粉丝点击