Android如何实现电影院选座效果

  介绍

这篇文章将为大家详细讲解有关Android如何实现电影院选座效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

具体内容如下

 Android如何实现电影院选座效果

这是一个简单的电影院选座效果,实现该效果大致分为三步:

1。自定义观点进行绘制;
2。手势缩放效果的实现;
3。手势触摸被选和未被选效果的实现;

先来看第一步,效果的绘制;

public  class  MoveSeatView  extends  View  {   ,private  final  boolean  DBG =,假;   ,private  Paint  Paint =, new 油漆();   ,private  Matrix  Matrix =, new 矩阵();   ,private  Matrix  tempMatrix =, new 矩阵();   ,//座位水平间距   ,private  int 间距;   ,//座位垂直间距   ,private  int  verSpacing;   ,//行号宽度   ,private  int  numberWidth;   ,//行数   ,private  int 行;   ,//列数   ,private  int 列;   ,//可选座位的图片   ,private  Bitmap  seatBitmap;   ,//选中时座位的图片   ,private  Bitmap  checkedSeatBitmap;   ,private  int  lastX;   ,private  int  lastY;   ,//整个座位图的宽度   ,private  int  seatBitmapWidth;   ,private  int  seatBitmapHeight;   ,private  float  screenHeight;   ,//屏幕的最小宽度   ,private  int  defaultScreenWidth;   ,//标识是否正在缩放   ,private  boolean  isScaling;   ,private  float  scaleX,写入scaleY;   ,//是否是第一次缩放   ,private  boolean  firstScale =,真的;   ,private  boolean  isOnClick;   ,private  int  downX,柔和;   ,private  boolean 指针;   ,//用于存储已经选在好的座位   ,public  ArrayList< Point>,列表;/* *   *,才能默认的座位图片的宽度,如果使用的自己的座位的图片比这个尺寸大或者小,会缩放到这个大小   ,*/,private  float  defaultImgW =, 40;   ,private  float  defaultImgH =, 34个;/* *   *,才能座位图片的宽度   ,*/,private  int  seatWidth =, 40;/* *   *,才能座位图片的高度   ,*/,private  int  seatHeight =, 34个;   ,private  float 缩放;   ,float  xScalel =, 1;   ,float  yScalel =, 1;   ,   ,public  MoveSeatView (Context 上下文),{   这才能(上下文,null);   ,}   ,   ,public  MoveSeatView (Context 上下文,AttributeSet  attrs), {   这才能(上下文,attrs,, 0);   ,}   ,   ,public  MoveSeatView (Context 上下文,AttributeSet  attrs,, int  defStyleAttr), {   超级才能(上下文,attrs,, defStyleAttr);   ,   ,}   ,   ,private  void  init (), {   spacing 才能=,(int), dip2px (5);   verSpacing 才能=,(int), dip2px (10);   defaultScreenWidth 才能=,(int), dip2px (80);   时间=seatBitmap 才能;BitmapFactory.decodeResource (getresource (),, R.drawable.seat_default);   时间=xScalel 才能;defaultImgW /, seatBitmap.getWidth ();   时间=yScalel 才能;defaultImgH /, seatBitmap.getHeight ();   时间=checkedSeatBitmap 才能;BitmapFactory.decodeResource (getresource (),, R.drawable.seat_green);   seatBitmapWidth 才能=,(int), (column  *, seatBitmap.getWidth (), *, xScalel  +, (column 安康;1),*,间距);   seatBitmapHeight 才能=,(int), (row  *, seatBitmap.getHeight (), *, yScalel  +, (row 安康;1),*,verSpacing);   paint.setColor才能(Color.RED);   numberWidth 才能=,(int), dip2px (20);   时间=screenHeight 才能;dip2px (20);   时间=list 才能;new  ArrayList<在();   matrix.postTranslate才能(numberWidth  +,间距,,screenHeight  +, 1, +, verSpacing);   ,}   }

上面这些都是一些初始化动作,接下来在onDraw方法中进行绘制;

@Override   ,protected  void  onDraw (Canvas 画布),{   if 才能;(row  & lt;=, 0, | |, column  & lt;=, 0), {   ,才能回报;   ,,}   drawSeat才能(画布);   super.onDraw才能(画布);   以前,}

具体的绘制逻辑实在drawSeat(),方法中实现的;

/* *   *,才能绘制   ,*   *,才能@param 画布   ,*/,private  void  drawSeat (Canvas 画布),{   时间=zoom 才能;getMatrixScaleX ();   float 才能;translateX =, getTranslateX ();   float 才能;translateY =, getTranslateY ();   float 才能;scaleX =,放大;   float 才能;scaleY =,放大;   for 才能;(int 小姐:=,0;,小姐:& lt;,行;,我+ +),{   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Android如何实现电影院选座效果