之前的需求是用FlipperView来实现上下翻动效果,但是发现数据有点长会造成一屏幕放不下三条数据,后来改为跑马灯,但是只有文字的跑马灯TextView自己就有,但是要求文字后面带一个小图标怎们办呢?
(1).MainActivity.java:
public class HomeFragment extends BaseFragment { private MarqueeScroll mMarqueeScroll; private int[] name_tv = {R.id.name_tv1, R.id.name_tv2, R.id.name_tv3, R.id.name_tv4, R.id.name_tv5, R.id.name_tv6}; private TextView[] name_tvs = new TextView[6]; private int[] name_iv = {R.id.name_iv1, R.id.name_iv2, R.id.name_iv3, R.id.name_iv4, R.id.name_iv5, R.id.name_iv6}; private ImageView[] name_ivs = new ImageView[6]; private ArrayList<HomeFlipperBean> mFlipperList = new ArrayList<HomeFlipperBean>(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_homenews, null); mMarqueeScroll = (MarqueeScroll) view.findViewById(R.id.MarqueeScroll); for (int i = 0; i < name_tv.length; i++) { name_tvs[i] = (TextView) view.findViewById(name_tv[i]); name_ivs[i] = (ImageView) view.findViewById(name_iv[i]); } mMarqueeScroll.run(); // 在这里进行解析 ResponseBaseBean<ArrayList<HomeFlipperBean>> responsBaseBean = JSON.parseObject(mFlipperData, new TypeReference<ResponseBaseBean<ArrayList<HomeFlipperBean>>>() { }); mFlipperList = responsBaseBean.getResult(); if (mFlipperList != null && mFlipperList.size() > 0) { // ForegroundColorSpan 为文字前景色,BackgroundColorSpan为文字背景色 ForegroundColorSpan span1 = new ForegroundColorSpan(0xFF535353); ForegroundColorSpan span2 = new ForegroundColorSpan(0xFF346699); for (int i = 0; i < name_tvs.length; i++) { HomeFlipperBean bean = mFlipperList.get(i); name_tvs[i].setText(bean.getName() + " " + bean.getPrice()); if ("up".equals(bean.getTrend())) { name_ivs[i].setBackgroundResource(R.drawable.in_img3); } else { name_ivs[i].setBackgroundResource(R.drawable.in_img4); } int length = bean.getName().length(); SpannableStringBuilder builder = new SpannableStringBuilder(name_tvs[i].getText().toString()); builder.setSpan(span1, 0, length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); builder.setSpan(span2, length + 1, name_tvs[i].getText().toString().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); name_tvs[i].setText(builder); } } } }
(2).fragment_homenews.xml:布局文件引用控件
<com.monkey.mushroom.ui.view.MarqueeScroll android:id="@+id/MarqueeScroll" android:layout_width="match_parent" android:layout_height="@dimen/kx_nonet_h" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#E1F4FF" android:orientation="horizontal" > <TextView android:id="@+id/name_tv1" style="@style/filpper_text_style" /> <ImageView android:id="@+id/name_iv1" style="@style/filpper_image_style" /> <TextView android:id="@+id/name_tv2" style="@style/filpper_text_style" /> <ImageView android:id="@+id/name_iv2" style="@style/filpper_image_style" /> <TextView android:id="@+id/name_tv3" style="@style/filpper_text_style" /> <ImageView android:id="@+id/name_iv3" style="@style/filpper_image_style" /> <TextView android:id="@+id/name_tv4" style="@style/filpper_text_style" /> <ImageView android:id="@+id/name_iv4" style="@style/filpper_image_style" /> <TextView android:id="@+id/name_tv5" style="@style/filpper_text_style" /> <ImageView android:id="@+id/name_iv5" style="@style/filpper_image_style" /> <TextView android:id="@+id/name_tv6" style="@style/filpper_text_style" /> <ImageView android:id="@+id/name_iv6" style="@style/filpper_image_style" /> </LinearLayout> </com.jyd.jyddz.ui.view.MarqueeScroll>
(3).MarqueeScroll.java:自定义HorizontalScrollView
public class MarqueeScroll extends HorizontalScrollView implements Runnable { private View inner; private Bitmap bitmap = null; /** * 滚动步长 */ private int step = 1; private int x; private int width; private int pWidth; private int pHeight; public MarqueeScroll(Context context, AttributeSet attrs) { super(context, attrs); setBackgroundColor(0xFFE1F4FF); } @Override protected void onFinishInflate() { if (getChildCount() == 1) { inner = getChildAt(0); } } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); handler.removeCallbacks(this); } @Override protected void onDraw(Canvas canvas) { if (getWidth() == 0) { android.view.ViewGroup.LayoutParams lp = getLayoutParams(); lp.width = pWidth; lp.height = pHeight; setLayoutParams(lp); } if (bitmap == null && inner != null) { width = inner.getMeasuredWidth(); bitmap = Bitmap.createBitmap(width, inner.getHeight(), Config.RGB_565); Canvas canvas1 = new Canvas(bitmap); inner.draw(canvas1); pWidth = getWidth(); pHeight = getHeight(); if (inner != null) { removeViewInLayout(inner); inner = null; } run(); } if (bitmap != null) { int nowX = x; nowX -= step; canvas.drawBitmap(bitmap, nowX, 0, null); if (nowX < 0) { canvas.drawBitmap(bitmap, width + nowX /* + space */, 0, null); } if (nowX <= -width) { nowX = 0; } x = nowX; } super.onDraw(canvas); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); } }; @Override public void run() { invalidate(); handler.postDelayed(this, 1); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Android自定义跑马灯文字效果,包括了Android自定义跑马灯文字效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android自定义跑马灯文字的具体代码,供大家参考,具体内容如下 Android 跑马灯效果文字: 效果图(真实动画很流畅,这个转gif有问题,感觉有点卡): 代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍Android实现图文垂直跑马灯效果,包括了Android实现图文垂直跑马灯效果的使用技巧和注意事项,需要的朋友参考一下 最近在维护老项目,老项目有一个地方需要修改,就是垂直跑马灯的问题,之前的垂直跑马灯是只有文字跑马灯,新版需要加上。 之前是用的MarqueeView,看了下源代码是只支持文字的,于是我就改了下原作者的源代码。 MarqueeView类之前作者的 原实现效果: 这里
本文向大家介绍Android自定义View实现纵向跑马灯效果详解,包括了Android自定义View实现纵向跑马灯效果详解的使用技巧和注意事项,需要的朋友参考一下 首先看看效果图(录制的gif有点卡,真实的效果还是很流畅的) 实现思路 通过上面的gif图可以得出结论,其实它就是同时绘制两条文本信息,然后通过动画不断的改变两条文本信息距离顶部的高度,以此来实现滚动的效果。 具体实现 首先定义一些要用
本文向大家介绍jQuery实现参数自定义的文字跑马灯效果,包括了jQuery实现参数自定义的文字跑马灯效果的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了jQuery实现文字跑马灯效果的具体代码,供大家参考,具体内容如下 一、明确需求 基本需求:最近在工作中接到一个新需求,简单来说就是实现一行文字从右到左跑马灯的效果,并且以固定的时间间隔进行循环。 原本这是一个很容易实现的需求,但是难点
本文向大家介绍Android自定义View实现竖直跑马灯效果案例解析,包括了Android自定义View实现竖直跑马灯效果案例解析的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android实现竖直跑马灯效果的具体代码,供大家参考,具体内容如下 首先给出跑马灯效果图 中间的色块是因为视频转成GIF造成的失真,自动忽略哈。 大家知道,横向的跑马灯android自带的TextView就
本文向大家介绍Android实现垂直跑马灯效果,包括了Android实现垂直跑马灯效果的使用技巧和注意事项,需要的朋友参考一下 在我们开发过程中,跑马灯这个功能非常实用的,在实现这个功能的时候,这个时候我们通常需要找demo来实现这个方法,我从github上面找到这个demo感觉很好用,所以就要实现了这个功能喽MarqueeView,看这个工具类,因为我找这个类的时候是没有点击事件的,所以我给它加