自定义控件实现文本滚动
来源:互联网 发布:手机配货软件 编辑:程序博客网 时间:2024/06/04 18:22
1.textView放在ViewFlipper中实现滑动效果(可设置左右、或者上下滚动),很明显这应该是自定义view;
2.利用textView的点击事件即可实现点击;
这给布局文件就是调用我们自定义的控件
下面是自定义控件的代码
import android.content.Context;import android.graphics.Color;import android.os.Handler;import android.os.Message;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.TranslateAnimation;import android.widget.TextSwitcher;import android.widget.TextView;import android.widget.ViewSwitcher;import java.util.ArrayList;/** * Created by Love_you on 2017/9/18 0018. */public class MarqueeTextView extends TextSwitcher implements ViewSwitcher.ViewFactory { private static final int FLAG_START_AUTO_SCROLL = 0; private static final int FLAG_STOP_AUTO_SCROLL = 1; private float mTextSize = 16 ; private int mPadding = 5; private int textColor = Color.BLACK; /** * @param textSize 字号 * @param padding 内边距 * @param textColor 字体颜色 */ public void setText(float textSize,int padding,int textColor) { mTextSize = textSize; mPadding = padding; this.textColor = textColor; } private OnItemClickListener itemClickListener; private Context mContext; private int currentId = -1; private ArrayList<String> textList; private Handler handler; public MarqueeTextView(Context context) { this(context, null); mContext = context; } public MarqueeTextView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; textList = new ArrayList<String>(); } public void setAnimTime(long animDuration) { setFactory(this); Animation in = new TranslateAnimation(0, 0, animDuration, 0); in.setDuration(animDuration); in.setInterpolator(new AccelerateInterpolator()); Animation out = new TranslateAnimation(0, 0, 0, -animDuration); out.setDuration(animDuration); out.setInterpolator(new AccelerateInterpolator()); setInAnimation(in); setOutAnimation(out); } /** * 间隔时间 * @param time */ public void setTextStillTime(final long time){ handler =new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case FLAG_START_AUTO_SCROLL: if (textList.size() > 0) { currentId++; setText(textList.get(currentId % textList.size())); } handler.sendEmptyMessageDelayed(FLAG_START_AUTO_SCROLL,time); break; case FLAG_STOP_AUTO_SCROLL: handler.removeMessages(FLAG_START_AUTO_SCROLL); break; } } }; } /** * 设置数据源 * @param titles */ public void setTextList(ArrayList<String> titles) { textList.clear(); textList.addAll(titles); currentId = -1; } /** * 开始滚动 */ public void startAutoScroll() { handler.sendEmptyMessage(FLAG_START_AUTO_SCROLL); } /** * 停止滚动 */ public void stopAutoScroll() { handler.sendEmptyMessage(FLAG_STOP_AUTO_SCROLL); } @Override public View makeView() { TextView t = new TextView(mContext); t.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); t.setMaxLines(1); t.setPadding(mPadding, mPadding, mPadding, mPadding); t.setTextColor(textColor); t.setTextSize(mTextSize); t.setClickable(true); t.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (itemClickListener != null && textList.size() > 0 && currentId != -1) { itemClickListener.onItemClick(currentId % textList.size()); } } }); return t; } /** * 设置点击事件监听 * @param itemClickListener */ public void setOnItemClickListener(OnItemClickListener itemClickListener) { this.itemClickListener = itemClickListener; } /** * 轮播文本点击监听器 */ public interface OnItemClickListener { /** * 点击回调 * @param position 当前点击ID */ void onItemClick(int position); }}
在Activity调用这个方法控件
private void init() { mTextview = (MarqueeTextView) findViewById(R.id.MarqueeTextView); titleList=new ArrayList<>(); titleList.add("公告1"); titleList.add("公告2"); titleList.add("公告3"); titleList.add("公告4"); titleList.add("公告5"); titleList.add("公告6"); titleList.add("公告7"); titleList.add("公告8"); mTextview.setTextList((ArrayList<String>) titleList); mTextview.setText(14, 5, Color.RED);//设置属性 mTextview.setTextStillTime(3000);//设置停留时长间隔 mTextview.setAnimTime(300);//设置进入和退出的时间间隔 mTextview.setOnItemClickListener(new MarqueeTextView.OnItemClickListener() { @Override public void onItemClick(int position) { Toast.makeText(MainActivity.this, "点击了 : " + titleList.get(position), Toast.LENGTH_SHORT).show(); } }); } @Override protected void onResume() { super.onResume(); mTextview.startAutoScroll(); } @Override protected void onPause() { super.onPause(); mTextview.stopAutoScroll(); }
下面是一个文本横向滚动这个布局文件就是一个TextView
public class MainActivity extends AppCompatActivity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView)this.findViewById(R.id.textview); String str = "我将应鲁哈尼总统邀请对伊朗进行国事访问,就新形势下深化中伊关系及重大国际和地区问题深入交换意见,共同推动中伊关系迈上新台阶。"; CharSequence charstr = Html.fromHtml(str); tv.setText(charstr); tv.setMovementMethod(LinkMovementMethod.getInstance()); }}
阅读全文
0 0
- 自定义控件实现文本滚动
- Android自定义控件, 实现图片无限滚动
- 自定义textview控件实现文字滚动效果
- 自定义View实现水平滚动控件
- 自定义控件:实现半圆滚动菜单效果
- 自定义View实现水平滚动控件
- 1.8 自定义滚动文本
- 自定义滚动文本
- 继承Cwnd实现的滚动文本窗口TEdit控件
- IOS控件系列---文本上下滚动的标签实现广告
- 自定义UI-TextView实现文本自动滚动显示
- 自定义滚动导航控件
- C#中控件文本滚动
- Android自定义控件超链接文本LinkTextView的实现
- Android自定义控件超链接文本LinkTextView的实现
- 自定义文字滚动控件,用于单行文本的显示,当文字过长的时候,就会自动的向左滚动
- symbian 自定义控件 滚动条
- Android自定义日期滚动控件
- Java线程源码解析之yield和sleep
- hello csdn
- java clone初始
- 嚼得菜根做得大事·《菜根谭》·三
- 动态规划和回溯法的异同
- 自定义控件实现文本滚动
- 分金子(360公司2017春招真题) 纸牌博弈问题 程序员代码面试指南
- 灰度、灰度级、分辨率、像素值;
- 查找——相邻元素差的绝对值都是1的数组当中的某个数的索引——多益网络2018校招编程1
- Spark-SQL之DataFrame操作大全
- CSS外边距重叠及防止方法
- 凸优化基础简述
- 无人机航摄时航高与地面分辨率的关系
- 字符集和编码问题