千家信息网

Android如何自定义View实现公交成轨迹图

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍Android如何自定义View实现公交成轨迹图,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下总体分析下:水平方向recyclewview,item
千家信息网最后更新 2026年11月04日Android如何自定义View实现公交成轨迹图

这篇文章主要介绍Android如何自定义View实现公交成轨迹图,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

具体内容如下

总体分析下:水平方向recyclewview,item包含定位点,站台位置和站台名称。

实现:

1.继承framelayout,实现构造方法:

public class BusStopPlateView extends FrameLayout {... public BusStopPlateView(@NonNull Context context) { super(context); initView(context); } public BusStopPlateView(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); initView(context); } public BusStopPlateView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) { super(context, attrs, defStyleAttr); initView(context); } private void initView(Context context) { ... //设置recycleview LayoutInflater.from(context).inflate(R.layout.xxx, this, true); mRecyclerView = (RecyclerView) findViewById(R.id.recycle); mRecyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)); mBusStopPlateAdapter = new BusStopPlateAdapter(mStationList); mRecyclerView.setAdapter(mBusStopPlateAdapter); ...}...}

2.recycleview适配器:初始化的时候设置起点设置终点设置车道设置当前车位置的下标

/** * 设置车道 */ private void setDriveway(BaseViewHolder helper, BusStopPlateStationInfo item) { if (helper.getAdapterPosition() <= adminCurrentIndex) { helper.getView(R.id.v_daolu).setSelected(true); helper.getView(R.id.iv_jiantou).setSelected(true); } else { helper.getView(R.id.v_daolu).setSelected(false); helper.getView(R.id.iv_jiantou).setSelected(false); } } /** * 设置起点 */ private void setStartStation(BaseViewHolder helper, BusStopPlateStationInfo item) { helper.setVisible(R.id.v_daolu, false) .setBackgroundRes(R.id.iv_jiantou, R.drawable.bg_busstop_vdaolu_start); } /** * 设置终点 */ private void setEndStation(BaseViewHolder helper, BusStopPlateStationInfo item) { helper.setBackgroundRes(R.id.iv_jiantou, R.drawable.bg_busstop_vdaolu_end) .setBackgroundRes(R.id.v_daolu, R.drawable.bg_busstop_vdaolu_end) .setVisible(R.id.v_zhanwei, true) .setVisible(R.id.v_daoli_zhanwei, false); } /** * 设置当前所在站点 */ private void setCurrentStation(BaseViewHolder helper, BusStopPlateStationInfo item) { mCurrentView = helper.getConvertView(); helper.setVisible(R.id.bus_stop_reach, true) .setVisible(R.id.iv_bus_stop_current, false) .setVisible(R.id.tv_bus_stop_current_num, false) .setVisible(R.id.iv_current_point, true) .setVisible(R.id.iv_admin_index, true) // 显示占位符,用于显示一半的灰色 .setBackgroundRes(R.id.v_daoli_zhanwei, R.drawable.bg_busstop_vdaolu) .setVisible(R.id.v_daoli_zhanwei, true);// .setTextColor(R.id.tv_bus_station_name, Color.parseColor("#3D93FD")); Glide.with(mContext) .load(R.drawable.bus_icon_fangxiang_current) .crossFade() .into((ImageView) helper.getView(R.id.iv_current_point)); List aliveBusInfos = item.getAliveBusInfos(); if (aliveBusInfos != null && aliveBusInfos.size() != 0) { AliveBusInfo aliveBusInfo = aliveBusInfos.get(0); if ("1".equals(aliveBusInfo.getStStatus()) && aliveBusInfo.getStName().equals(item.getStName())) { helper.setVisible(R.id.iv_admin_index, false) .setVisible(R.id.iv_bus_stop_current, true) .setImageResource(R.id.iv_bus_stop_current, R.drawable.bus_stop_current); } } else { Glide.with(mContext) .load(R.drawable.icon_admin_current_station) .crossFade() .into((ImageView) helper.getView(R.id.iv_admin_index)); } } /** * 设置公交所在站点 */ private void setBusStation(BaseViewHolder helper, BusStopPlateStationInfo item) { List aliveBusInfos = item.getAliveBusInfos(); if (aliveBusInfos != null && aliveBusInfos.size() != 0) { AliveBusInfo aliveBusInfo = aliveBusInfos.get(0); if ("0".equals(aliveBusInfo.getStStatus())) { // 在车道上 helper.setVisible(R.id.bus_stop_not_to, true) .setVisible(R.id.bus_stop_reach, false) .setText(R.id.tv_stop_not_to_num, String.valueOf(aliveBusInfos.size())) // 显示在过道中的车 .setVisible(R.id.iv_stop_not_to, aliveBusInfos.size() != 0) // 是否显示数字 .setVisible(R.id.tv_stop_not_to_num, aliveBusInfos.size() > 1); // 如果已经过站 显示灰色图标 if (aliveBusInfo.getStCount() < 0) { GlideUtils.loadImageView(mContext, R.drawable.bus_stop_over_station_min, helper.getView(R.id.iv_stop_not_to)); } else { GlideUtils.loadImageView(mContext, R.drawable.bus_stop_not_to, helper.getView(R.id.iv_stop_not_to)); } } else if ("1".equals(aliveBusInfo.getStStatus())) { // 到站 helper.setVisible(R.id.bus_stop_not_to, false) .setVisible(R.id.bus_stop_reach, true) .setVisible(R.id.iv_admin_index, true) .setVisible(R.id.iv_bus_stop_current, false) .setVisible(R.id.tv_bus_stop_current_num, aliveBusInfo.getStCount() > 1) .setText(R.id.tv_bus_stop_current_num, String.valueOf(aliveBusInfos.size())); // 如果已经过站 显示灰色图标 if (aliveBusInfo.getStCount() < 0) { GlideUtils.loadImageView(mContext, R.drawable.bus_stop_over_station, helper.getView(R.id.iv_admin_index)); } else { GlideUtils.loadImageView(mContext, R.drawable.bus_stop_not_to, helper.getView(R.id.iv_admin_index)); } } } else { // 隐藏公交车 helper.setVisible(R.id.bus_stop_not_to, false) .setVisible(R.id.bus_stop_reach, false); } }

3.外部activity的点击事件:点击文字的时候将当前位置对象刷新到选择的位置,刷新recycleview

mBusStopPlateView.setOnBusStopPlateViewItemClick(new BusStopPlateView.onBusStopPlateViewEvent() { @Override public void onItemClick(BusStopPlateStationInfo station) { stationId = station.getStId(); stationName = station.getStName(); exportStationInfo(mBusStopPlateView.getStationList()); aliveBusRefresh(); //当上车提醒保存的信息与当前候车站点信息不一致时恢复为上车提醒, // 并在点击上车提醒是判断是否更新上车提醒的站点 BusRemind remind = SpKeyConfig.getOnRemind(); if (remind != null) { if (remind.getStationId().equals(stationId) && remind.getLineId().equals(mLineId)) { tvOnRemind.setText("取消提醒"); ivOnRemind.setImageResource(R.drawable.bus_icon_onremind_on); } else { tvOnRemind.setText("上车提醒"); ivOnRemind.setImageResource(R.drawable.bus_icon_onremind_off); } } } @Override public void onCurrentViewPosition(int x, int y, boolean isVisibility) { mIvPoint.setTranslationX(x - mIvPoint.getWidth() / 2 + 6); mIvPoint.setVisibility(isVisibility ? View.VISIBLE : View.INVISIBLE); } }

以上是"Android如何自定义View实现公交成轨迹图"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

站点 位置 内容 灰色 车道 轨迹 信息 图标 所在 时候 站台 篇文章 终点 起点 一致 下标 事件 价值 公交车 兴趣 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网佳科技有限公司 北京互联网科技 西安互联网科技 互联网 卓越科技 善班互联网科技 科技创新互联网企业 成都狮子座互联网科技 中国最先进互联网科技公司 南山科技园互联网公司有哪些 受益于互联网科技的高速发展 宁夏科技产业互联网案例 语蝶互联网科技有限公司 互联网科技与大数据专业 高科技互联网发展前景如何 皮皮虾互联网科技有限公司 互联网相关科技技术 数字互联网科技有限公司 山东蛋芒互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司 北京瑞云互联网科技有限公司 新华互联网科技 科技股互联网 关于新基建和互联网科技 极限挑战互联网科技 创业天下互联网科技有限公司 互联网科技和信息 企晟互联网信息科技有限公司 智帮互联网科技公司最近动向 广州梦谷互联网科技有限公司领导 银川新华互联网科技学校招聘
0