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
- Android中仿淘宝头条,自定义控件,向上滚动
- Android仿淘宝头条向上滚动广告条的效果ViewFlipper
- Android仿淘宝滚动的头条
- Android仿淘宝滚动的头条
- 【Android 进阶】淘宝头条:向上滚动广告条ViewFlipper
- Android基础控件——ViewFlipper的使用,仿淘宝头条垂直滚动广告条
- Android基础控件——ViewFlipper的使用,仿淘宝头条垂直滚动广告条
- Android仿淘宝头条垂直滚动,垂直走马灯,公告
- Android中仿淘宝头条滚动效果,可定制布局
- Android【垂直滚动广告条】仿淘宝头条1号店京东—垂直滚动广告条
- Android【垂直滚动广告条】仿淘宝头条1号店京东—垂直滚动广告条
- Android 垂直滚动广告条,仿淘宝头条垂直滚动展示最新消息
- 自定义控件:垂直轮播的小贴士Banner,仿 淘宝app的“淘宝头条”
- 仿天猫热点,淘宝头条向上自动滚动的textview
- 仿天猫热点,淘宝头条向上自动滚动的textview
- 仿淘宝首页的淘宝头条View垂直滚动
- 仿淘宝首页的淘宝头条View垂直滚动
- 仿淘宝首页的淘宝头条View垂直滚动
- 条款1 视c++为一个语言联邦(如何理解c++)
- Shell——Date日期处理【一】、获取指定日期几天后的日期
- Mysql --->Oracle的数据迁移
- memcached-内存存储原理
- linux下查看进程运行的时间
- Android中仿淘宝头条,自定义控件,向上滚动
- BZOJ 1023 [SCOI2009]生日快乐
- Android Studio格式排版(layout java)
- linux crontab 不运行的错觉
- Android 严苛模式(StrictMode)详解
- 从USB驱动器运行Windows 10
- 搭建自己的ngrok服务器
- 2017 年初、阿里、腾讯、百度、华为、京东、搜狗和滴滴面试题汇集
- Python