热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android自定义View实现选座功能

这篇文章主要介绍了Android自定义View实现选座功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

我们在安卓开发中安卓自带的控件满足不了我们的需求,因此我们就需要用到自定义View来满足我们的需求,在这里我要讲解的是自定义View实现选座功能,在安卓中一个会使用自定义View的人一定会开发出与众不同以及美观的项目
首先,我展示一下效果

选座效果

以上主要就是我们需要创建一个我们自己的View继承自Viewgroup控件并实现onMeasure以及onDraw方法
具体的代码是这样的

public class SearView extends ViewGroup {
  private Context context;
  public SearView(@NonNull Context context) {
    super(context);
  }

  public SearView(@NonNull Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    this.cOntext=getContext();
  }

  public SearView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
  }

  @Override
  protected void onLayout(boolean changed, int l, int t, int r, int b) {

  }


  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

  }
  private ArrayList mlist;
  public void setData(ArrayList list){
    this.mlist = list;
    invalidate();
  }


  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (mlist != null && mlist.size() > 0) {
      for (int i = 0; i =left&&x=top&&y<=bottom){
        clickedSeat.clickedSeat(resultBean1);
        int status = resultBean1.getStatus();
        if (status==1){
          status=3;
          resultBean1.setStatus(status);
        }else if (status==3){
          status=1;
          resultBean1.setStatus(status);
        }
        break;
      }
    }
    postInvalidate();
  }
  public interface ClickedSeat{
    void clickedSeat(SeatinfoBean.ResultBean resultBean);
  }
  private ClickedSeat clickedSeat;

  public void setClickedSeat(ClickedSeat clickedSeat) {
    this.clickedSeat = clickedSeat;
  }
}

以上的resultBean是我们根据选座接口中的返回值判断座位是否已经被选,大家可以参考一下我的Bean类,但具体的做法还要以自己的接口文件为主

public static class ResultBean {
    /**
     * row : 1
     * seat : 1
     * status : 2
     */

    private String row;
    private String seat;
    private int status;
    private int left;
    private int top;
    private int right;
    private int bottom;
    private Context context;
    private boolean ist = false;

    public String getRow() {
      return row;
    }

    public void setRow(String row) {
      this.row = row;
    }

    public String getSeat() {
      return seat;
    }

    public void setSeat(String seat) {
      this.seat = seat;
    }

    public int getStatus() {
      return status;
    }

    public void setStatus(int status) {
      this.status = status;
    }

    public int getLeft() {
      return left;
    }

    public void setLeft(int left) {
      this.left = left;
    }

    public int getTop() {
      return top;
    }

    public void setTop(int top) {
      this.top = top;
    }

    public int getRight() {
      return right;
    }

    public void setRight(int right) {
      this.right = right;
    }

    public int getBottom() {
      return bottom;
    }

    public void setBottom(int bottom) {
      this.bottom = bottom;
    }

    public Context getContext() {
      return context;
    }

    public void setContext(Context context) {
      this.cOntext= context;
    }

    public boolean isIst() {
      return ist;
    }

    public void setIst(boolean ist) {
      this.ist = ist;
    }
    public void draw(Canvas canvas,Context context){
      if (status==2){
        BitmapDrawable drawable = (BitmapDrawable) context.getResources().getDrawable(R.drawable.xuan);
        Bitmap bitmap = drawable.getBitmap();
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        int row = Integer.parseInt(getRow());
        int seat = Integer.parseInt(getSeat());
        row = row*50;
        seat = seat*50;
        canvas.drawBitmap(bitmap,seat,row,new Paint());
        left = seat;
        top = row;
        right = seat+width;
        bottom = row+height;
      }
      if (status==1){
        BitmapDrawable drawable = (BitmapDrawable) context.getResources().getDrawable(R.drawable.xuan1);
        Bitmap bitmap = drawable.getBitmap();
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        int row = Integer.parseInt(getRow());
        int seat = Integer.parseInt(getSeat());
        row = row*50;
        seat = seat*50;
        canvas.drawBitmap(bitmap,seat,row,new Paint());
        left = seat;
        top = row;
        right = seat+width;
        bottom = row+height;
      }
      if (status==3){
        BitmapDrawable drawable = (BitmapDrawable) context.getResources().getDrawable(R.drawable.xuan3);
        Bitmap bitmap = drawable.getBitmap();
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        int row = Integer.parseInt(getRow());
        int seat = Integer.parseInt(getSeat());
        row = row*50;
        seat = seat*50;
        canvas.drawBitmap(bitmap,seat,row,new Paint());
        left = seat;
        top = row;
        right = seat+width;
        bottom = row+height;
      }
    }
  }
}

最后,我们需要在布局文件里进行调用,我的布局文件是这样的

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
  
    
    
    
    
  
  
  
  

以上就是我的选座功能实现的全过程,欢迎大家提问

总结

到此这篇关于Android自定义View实现选座功能的文章就介绍到这了,更多相关android自定义view选座内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 本文介绍了如何通过创建自定义 XML 文件来修改 Android 中 Spinner 的项样式,包括颜色和大小的调整。 ... [详细]
  • IIS6批量添加主机头,修改IIS数据库
    首先,找到IIS的数据库。默认是在C:\WINDOWS\system32\inetsrv下的MetaBase.xml文件。如果找不到,请右键右键站点-》所有服务-》将配置保存到一个 ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • 为帮助编程爱好者更好地掌握Python和Go语言的核心技能,我们特别提供两本精选图书的免费赠阅机会。《易懂的Python算法指南》适合所有希望提高算法理解能力的读者,《Go语言编程从入门到精通》则面向对Go语言感兴趣的初学者及有一定基础的开发者。 ... [详细]
  • 第1章选择流程控制语句1.1顺序结构的基本使用1.1.1顺序结构概述是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行 ... [详细]
  • 现在的新手程序猿,动不动就是框架,就连外面培训的也是框架,我就问一句,没了框架是不是就啥也不会了 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • 使用IntelliJ IDEA高效开发与运行Shell脚本
    本文介绍了如何利用IntelliJ IDEA中的BashSupport插件来增强Shell脚本的开发体验,包括插件的安装、配置以及脚本的运行方法。 ... [详细]
  • ED Tree HDU4812 点分治+逆元
    这道题非常巧妙!!!我们进行点分治的时候,算出当前子节点的所有子树中的节点,到当前节点节点的儿子节点的距离,如下图意思就是当前节点的红色节点,我们要求出红色节点的儿子节点绿色节点, ... [详细]
  • 本文详细介绍了Python中的生成器表达式、列表推导式、字典推导式及集合推导式等,探讨了它们之间的差异,并提供了丰富的代码示例。 ... [详细]
  • 本文介绍了基于Java的在线办公工作流系统的毕业设计方案,涵盖了MyBatis框架的应用、源代码分析、调试与部署流程、数据库设计以及相关论文撰写指导。 ... [详细]
  • 利用Cookie实现用户登录状态的持久化
    本文探讨了如何使用Cookie技术在Web应用中实现用户登录状态的持久化,包括Cookie的基本概念、优势及主要操作方法,并通过一个简单的Java Web项目示例展示了具体实现过程。 ... [详细]
  • 本文深入分析了在使用JavaScript中的Date.UTC()方法初始化Date对象时,getDay()方法返回值与预期不符的原因,并提供了相应的解决方案。 ... [详细]
  • 本文详细介绍了JavaScript中数组的转换方法、栈方法、队列方法、重排序方法及操作方法,包括toLocaleString()、toString()、valueOf()等基本转换方法,以及push()、pop()、shift()、unshift()等用于模拟栈和队列行为的方法。 ... [详细]
  • 探索OpenWrt中的LuCI框架
    本文深入探讨了OpenWrt系统中轻量级HTTP服务器uhttpd的工作原理及其配置,重点介绍了LuCI界面的实现机制。 ... [详细]
author-avatar
王小小小小弦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有