介绍
这篇文章将为大家详细讲解有关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 nullAndroid如何实现电影院选座效果