重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
今天就跟大家聊聊有关怎么在Android中自定义一个图文跑马灯效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
十年建站经验, 成都做网站、成都网站制作客户的见证与正确选择。成都创新互联公司提供完善的营销型网页建站明细报价表。后期开发更加便捷高效,我们致力于追求更美、更快、更规范。
(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 ArrayListmFlipperList = new ArrayList (); @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 > responsBaseBean = JSON.parseObject(mFlipperData, new TypeReference >>() { }); 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:布局文件引用控件
(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中自定义一个图文跑马灯效果有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。