android+自定义跑马灯,Android自定义图文跑马灯效果

之前的需求是用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 mFlipperList = 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:布局文件引用控件

android:id="@+id/MarqueeScroll"

android:layout_width="match_parent"

android:layout_height="@dimen/kx_nonet_h" >

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#E1F4FF"

android:orientation="horizontal" >

android:id="@+id/name_tv1"

style="@style/filpper_text_style" />

android:id="@+id/name_iv1"

style="@style/filpper_image_style" />

android:id="@+id/name_tv2"

style="@style/filpper_text_style" />

android:id="@+id/name_iv2"

style="@style/filpper_image_style" />

android:id="@+id/name_tv3"

style="@style/filpper_text_style" />

android:id="@+id/name_iv3"

style="@style/filpper_image_style" />

android:id="@+id/name_tv4"

style="@style/filpper_text_style" />

android:id="@+id/name_iv4"

style="@style/filpper_image_style" />

android:id="@+id/name_tv5"

style="@style/filpper_text_style" />

android:id="@+id/name_iv5"

style="@style/filpper_image_style" />

android:id="@+id/name_tv6"

style="@style/filpper_text_style" />

android:id="@+id/name_iv6"

style="@style/filpper_image_style" />

(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);

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值