完整项目结构:



登录注册UI设计:

登录成功跳转个人信息界面:

签到功能:

电影主页:(上下图片可以左右滑动查看热映电影)

查看所有热映电影:(可以上下滑动)

选择一部电影查看详细信息:

点击购票:

选位置:(左上角会出现一个定位预览界面,高度还原小程序UI界面)

点击购买并且完成付款:

付款成功自动跳转到消息页面,里面会显示购买好的电影票:

*

源代码:
Mainactivity.java

package com.example.myapplication;import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
import android.widget.Toast;import java.util.ArrayList;public class MainActivity extends View {private static final String TAG = MainActivity.class.getName();boolean isDebug;Paint paint = new Paint();Matrix matrix = new Matrix();int spacing = 6;int verSpacing = 10;int numberWidth = 20;int row = 0;int column = 0;Bitmap seatBitmap;Bitmap checkedSeatBitmap;Bitmap seatSoldBitmap;Bitmap overviewBitmap;Bitmap seat;int lastX;int lastY;int seatBitmapWidth;int seatBitmapHeight;boolean isNeedDrawSeatBitmap = true;float rectSize = 10;float rectWidth = 10;float overviewSpacing = 5;float overviewVerSpacing = 5;float overviewScale = 4.8f;float screenHeight;float screenWidthScale = 0.5f;int defaultScreenWidth;boolean isScaling;float scaleX, scaleY;boolean firstScale = true;public void setMaxSelected(int maxSelected) {this.maxSelected = maxSelected;}int maxSelected=Integer.MAX_VALUE;public void setSeatChecker(SeatChecker seatChecker) {this.seatChecker = seatChecker;invalidate();}private SeatChecker seatChecker;public void setScreenName(String screenName) {this.screenName = screenName;}private String screenName = "";ScaleGestureDetector scaleGestureDetector = new ScaleGestureDetector(getContext(), new ScaleGestureDetector.OnScaleGestureListener() {@Overridepublic boolean onScale(ScaleGestureDetector detector) {isScaling = true;float scaleFactor = detector.getScaleFactor();if (getMatrixScaleY() * scaleFactor > 3) {scaleFactor = 3 / getMatrixScaleY();}if (firstScale) {scaleX = detector.getCurrentSpanX();scaleY = detector.getCurrentSpanY();firstScale = false;}if (getMatrixScaleY() * scaleFactor < 0.5) {scaleFactor = 0.5f / getMatrixScaleY();}matrix.postScale(scaleFactor, scaleFactor, scaleX, scaleY);invalidate();return true;}@Overridepublic boolean onScaleBegin(ScaleGestureDetector detector) {return true;}@Overridepublic void onScaleEnd(ScaleGestureDetector detector) {isScaling = false;firstScale = true;}});boolean isOnClick;GestureDetector gestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {@Overridepublic boolean onSingleTapConfirmed(MotionEvent e) {isOnClick = true;int x = (int) e.getX();int y = (int) e.getY();for (int i = 0; i < row; i++) {for (int j = 0; j < column; j++) {int tempX = (int) ((j * seatBitmap.getWidth() + j * spacing) * getMatrixScaleX() + getTranslateX());int maxTemX = (int) (tempX + seatBitmap.getWidth() * getMatrixScaleX());int tempY = (int) ((i * seatBitmap.getHeight() + i * verSpacing) * getMatrixScaleY() + getTranslateY());int maxTempY = (int) (tempY + seatBitmap.getHeight() * getMatrixScaleY());if (seatChecker != null && seatChecker.isValidSeat(i, j) && !seatChecker.isSold(i, j)) {if (x >= tempX && x <= maxTemX && y >= tempY && y <= maxTempY) {String seat = i + "," + j;if (isHave(seat)) {remove(seat);if (seatChecker != null) {seatChecker.unCheck(i, j);}} else {if(selects.size()>=maxSelected){Toast.makeText(getContext(),"最多只能选择"+maxSelected+"个",Toast.LENGTH_SHORT).show();return super.onSingleTapConfirmed(e);}else {selects.add(seat);if (seatChecker != null) {seatChecker.checked(i, j);}}}isNeedDrawSeatBitmap = true;isDrawOverviewBitmap = true;float currentScaleY = getMatrixScaleY();if (currentScaleY < 1.7) {postDelayed(new AnimationScaleRunnable(x, y, 1.9f), SCALE_TIME);}invalidate();break;}}}}return super.onSingleTapConfirmed(e);}});public MainActivity(Context context) {super(context);}int overview_checked;int overview_sold;int seatCheckedResID;int seatSoldResID;int seatAvailableResID;public MainActivity(Context context, AttributeSet attrs) {super(context, attrs);TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.SeatTableView);overview_checked = typedArray.getColor(R.styleable.SeatTableView_overview_checked, Color.parseColor("#5A9E64"));overview_sold = typedArray.getColor(R.styleable.SeatTableView_overview_sold, Color.RED);seatCheckedResID = typedArray.getResourceId(R.styleable.SeatTableView_seat_checked, R.drawable.seat1);seatSoldResID = typedArray.getResourceId(R.styleable.SeatTableView_overview_sold, R.drawable.seat2);seatAvailableResID = typedArray.getResourceId(R.styleable.SeatTableView_seat_available, R.drawable.seat);init();}public MainActivity(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);}private void init() {spacing = (int) dip2Px(5);verSpacing = (int) dip2Px(10);defaultScreenWidth = (int) dip2Px(80);seatBitmap = BitmapFactory.decodeResource(getResources(), seatAvailableResID);checkedSeatBitmap = BitmapFactory.decodeResource(getResources(), seatCheckedResID);seatSoldBitmap = BitmapFactory.decodeResource(getResources(), seatSoldResID);seatBitmapWidth = column * seatBitmap.getWidth() + (column - 1) * spacing;seatBitmapHeight = row * seatBitmap.getHeight() + (row - 1) * verSpacing;paint.setColor(Color.RED);numberWidth = (int) dip2Px(20);screenHeight = dip2Px(20);headHeight = dip2Px(30);if (seatBitmapWidth > 0 && seatBitmapHeight > 0) {seat = Bitmap.createBitmap(seatBitmapWidth, seatBitmapHeight, Bitmap.Config.ARGB_4444);seatCanvas = new Canvas(seat);}headPaint = new Paint();headPaint.setStyle(Paint.Style.FILL);headPaint.setTextSize(24);headPaint.setColor(Color.WHITE);headPaint.setAntiAlias(true);pathPaint = new Paint(Paint.ANTI_ALIAS_FLAG);pathPaint.setStyle(Paint.Style.FILL);pathPaint.setColor(Color.parseColor("#e2e2e2"));redBorderPaint = new Paint();redBorderPaint.setAntiAlias(true);redBorderPaint.setColor(Color.RED);redBorderPaint.setStyle(Paint.Style.STROKE);redBorderPaint.setStrokeWidth(getResources().getDisplayMetrics().density * 1);rectF = new RectF();rectSize = seatBitmap.getHeight() / overviewScale;rectWidth = seatBitmap.getWidth() / overviewScale;overviewSpacing = spacing / overviewScale;overviewVerSpacing = verSpacing / overviewScale;rectW = column * rectWidth + (column - 1) * overviewSpacing + overviewSpacing * 2;rectH = row * rectSize + (row - 1) * overviewVerSpacing + overviewVerSpacing * 2;overviewBitmap = Bitmap.createBitmap((int) rectW, (int) rectH, Bitmap.Config.ARGB_4444);}float rectW;float rectH;Paint headPaint;Bitmap headBitmap;boolean isFirstDraw = true;boolean isDrawOverview = false;boolean isDrawOverviewBitmap = true;@Overrideprotected void onDraw(Canvas canvas) {if (row <= 0 || column == 0) {return;}if (isNeedDrawSeatBitmap) {drawSeat();}if (isFirstDraw) {isFirstDraw = false;matrix.postTranslate(getWidth() / 2 - seatBitmapWidth / 2, headHeight + screenHeight + borderHeight + verSpacing);}canvas.drawBitmap(seat, matrix, paint);drawNumber(canvas);if (headBitmap == null) {headBitmap = drawHeadInfo();}canvas.drawBitmap(headBitmap, 0, 0, null);drawScreen(canvas);if (isDrawOverview) {if (isDrawOverviewBitmap) {drawOverview();}canvas.drawBitmap(overviewBitmap, 0, 0, null);drawOverview(canvas);}}private int downX, downY;private boolean pointer;@Overridepublic boolean onTouchEvent(MotionEvent event) {int y = (int) event.getY();int x = (int) event.getX();super.onTouchEvent(event);scaleGestureDetector.onTouchEvent(event);gestureDetector.onTouchEvent(event);int pointerCount = event.getPointerCount();if (pointerCount > 1) {pointer = true;}switch (event.getAction()) {case MotionEvent.ACTION_DOWN:pointer = false;downX = x;downY = y;isDrawOverview = true;handler.removeCallbacks(hideOverviewRunnable);invalidate();break;case MotionEvent.ACTION_MOVE:if (!isScaling && !isOnClick) {int downDX = Math.abs(x - downX);int downDY = Math.abs(y - downY);if ((downDX > 10 || downDY > 10) && !pointer) {int dx = x - lastX;int dy = y - lastY;matrix.postTranslate(dx, dy);invalidate();}}break;case MotionEvent.ACTION_UP:handler.postDelayed(hideOverviewRunnable, 1500);autoScale();int downDX = Math.abs(x - downX);int downDY = Math.abs(y - downY);if ((downDX > 10 || downDY > 10) && !pointer) {autoScroll();}break;}isOnClick = false;lastY = y;lastX = x;return true;}private Runnable hideOverviewRunnable = new Runnable() {@Overridepublic void run() {isDrawOverview = false;invalidate();}};float headHeight;int borderHeight = 1;Bitmap drawHeadInfo() {String txt = "已售";float txtY = getBaseLine(headPaint, 0, headHeight);int txtWidth = (int) headPaint.measureText(txt);float spacing = dip2Px(10);float spacing1 = dip2Px(5);float y = (headHeight - seatBitmap.getHeight()) / 2;float width = seatBitmap.getWidth() + spacing1 + txtWidth + spacing + seatSoldBitmap.getWidth() + txtWidth + spacing1 + spacing + checkedSeatBitmap.getHeight() + spacing1 + txtWidth;Bitmap bitmap = Bitmap.createBitmap(getWidth(), (int) headHeight, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);//绘制背景canvas.drawRect(0, 0, getWidth(), headHeight, headPaint);headPaint.setColor(Color.BLACK);float startX = (getWidth() - width) / 2;canvas.drawBitmap(seatBitmap, startX, (headHeight - seatBitmap.getHeight()) / 2, headPaint);canvas.drawText("可选", startX + seatBitmap.getWidth() + spacing1, txtY, headPaint);float soldSeatBitmapY = startX + seatBitmap.getWidth() + spacing1 + txtWidth + spacing;canvas.drawBitmap(seatSoldBitmap, soldSeatBitmapY, (headHeight - seatBitmap.getHeight()) / 2, headPaint);canvas.drawText("已售", soldSeatBitmapY + seatSoldBitmap.getWidth() + spacing1, txtY, headPaint);float checkedSeatBitmapX = soldSeatBitmapY + seatSoldBitmap.getWidth() + spacing1 + txtWidth + spacing;canvas.drawBitmap(checkedSeatBitmap, checkedSeatBitmapX, y, headPaint);canvas.drawText("已选", checkedSeatBitmapX + spacing1 + checkedSeatBitmap.getWidth(), txtY, headPaint);//绘制分割线headPaint.setStrokeWidth(1);headPaint.setColor(Color.GRAY);canvas.drawLine(0, headHeight, getWidth(), headHeight, headPaint);return bitmap;}Paint pathPaint;/*** 绘制中间屏幕*/void drawScreen(Canvas canvas) {pathPaint.setStyle(Paint.Style.FILL);pathPaint.setColor(Color.parseColor("#e2e2e2"));float startY = headHeight + borderHeight;float centerX = seatBitmapWidth * getMatrixScaleX() / 2 + getTranslateX();float screenWidth = seatBitmapWidth * screenWidthScale * getMatrixScaleX();if (screenWidth < defaultScreenWidth) {screenWidth = defaultScreenWidth;}Path path = new Path();path.moveTo(centerX, startY);path.lineTo(centerX - screenWidth / 2, startY);path.lineTo(centerX - screenWidth / 2 + 20, screenHeight * getMatrixScaleY() + startY);path.lineTo(centerX + screenWidth / 2 - 20, screenHeight * getMatrixScaleY() + startY);path.lineTo(centerX + screenWidth / 2, startY);canvas.drawPath(path, pathPaint);pathPaint.setColor(Color.BLACK);pathPaint.setTextSize(20 * getMatrixScaleX());canvas.drawText(screenName, centerX - pathPaint.measureText(screenName) / 2, getBaseLine(pathPaint, startY, startY + screenHeight * getMatrixScaleY()), pathPaint);}private static final int SEAT_TYPE_SOLD = 1;private static final int SEAT_TYPE_SELECTED = 2;private static final int SEAT_TYPE_AVAILABLE = 3;private static final int SEAT_TYPE_NOT_AVAILABLE = 4;Canvas seatCanvas;void drawSeat() {for (int i = 0; i < row; i++) {for (int j = 0; j < column; j++) {int left = j * seatBitmap.getWidth() + j * spacing;int top = i * seatBitmap.getHeight() + i * verSpacing;int seatType = getSeatType(i, j);switch (seatType) {case SEAT_TYPE_AVAILABLE:seatCanvas.drawBitmap(seatBitmap, left, top, paint);break;case SEAT_TYPE_NOT_AVAILABLE:break;case SEAT_TYPE_SELECTED:seatCanvas.drawBitmap(checkedSeatBitmap, left, top, paint);break;case SEAT_TYPE_SOLD:seatCanvas.drawBitmap(seatSoldBitmap, left, top, paint);break;}}}isNeedDrawSeatBitmap = false;}private int getSeatType(int row, int column) {String seat = row + "," + column;int seatType = SEAT_TYPE_AVAILABLE;if (seatChecker != null) {if (!seatChecker.isValidSeat(row, column)) {seatType = SEAT_TYPE_NOT_AVAILABLE;} else if (seatChecker.isSold(row, column)) {seatType = SEAT_TYPE_SOLD;}}if (isHave(seat)) {seatType = SEAT_TYPE_SELECTED;}return seatType;}RectF rectF;/*** 绘制行号*/void drawNumber(Canvas canvas) {paint.setColor(Color.parseColor("#7e000000"));paint.setTextSize(getResources().getDisplayMetrics().density * 16);paint.setAntiAlias(true);int translateY = (int) getTranslateY();float scaleY = getMatrixScaleY();rectF.top = translateY - paint.measureText("4") / 2;rectF.bottom = translateY + (seatBitmapHeight * scaleY) + paint.measureText("4") / 2;rectF.left = 0;rectF.right = numberWidth;canvas.drawRoundRect(rectF, numberWidth / 2, numberWidth / 2, paint);Paint.FontMetrics fontMetrics = paint.getFontMetrics();paint.setColor(Color.WHITE);paint.setTextAlign(Paint.Align.CENTER);for (int i = 0; i < row; i++) {int top = (int) ((i * seatBitmap.getHeight() + i * verSpacing) * scaleY) + translateY;int bottom = (int) ((i * seatBitmap.getHeight() + i * verSpacing + seatBitmap.getHeight()) * scaleY) + translateY;int baseline = (int) ((bottom + top - fontMetrics.bottom - fontMetrics.top) / 2);canvas.drawText((i + 1) + "", numberWidth / 2, baseline, paint);}}Paint redBorderPaint;/*** 绘制概览图*/void drawOverview(Canvas canvas) {//绘制红色框int left = (int) -getTranslateX();if (left < 0) {left = 0;}left /= overviewScale;left /= getMatrixScaleX();int currentWidth = (int) (getTranslateX() + (column * seatBitmap.getWidth() + spacing * (column - 1)) * getMatrixScaleX());if (currentWidth > getWidth()) {currentWidth = currentWidth - getWidth();} else {currentWidth = 0;}int right = (int) (rectW - currentWidth / overviewScale / getMatrixScaleX());float top = -getTranslateY()+headHeight;if (top < 0) {top = 0;}top /= overviewScale;top /= getMatrixScaleY();if (top > 0) {top += overviewVerSpacing;}int currentHeight = (int) (getTranslateY() + (row * seatBitmap.getHeight() + verSpacing * (row - 1)) * getMatrixScaleY());if (currentHeight > getHeight()) {currentHeight = currentHeight - getHeight();} else {currentHeight = 0;}int bottom = (int) (rectH - currentHeight / overviewScale / getMatrixScaleY());canvas.drawRect(left, top, right, bottom, redBorderPaint);}Bitmap drawOverview() {isDrawOverviewBitmap = false;int bac = Color.parseColor("#7e000000");paint.setColor(bac);paint.setAntiAlias(true);paint.setStyle(Paint.Style.FILL);Canvas canvas = new Canvas(overviewBitmap);//绘制透明灰色背景canvas.drawRect(0, 0, rectW, rectH, paint);paint.setColor(Color.WHITE);for (int i = 0; i < row; i++) {float top = i * rectSize + i * overviewVerSpacing + overviewVerSpacing;for (int j = 0; j < column; j++) {int seatType = getSeatType(i, j);switch (seatType) {case SEAT_TYPE_AVAILABLE:paint.setColor(Color.WHITE);break;case SEAT_TYPE_NOT_AVAILABLE:continue;case SEAT_TYPE_SELECTED:paint.setColor(overview_checked);break;case SEAT_TYPE_SOLD:paint.setColor(overview_sold);break;}float left;left = j * rectWidth + j * overviewSpacing + overviewSpacing;canvas.drawRect(left, top, left + rectWidth, top + rectSize, paint);}}return overviewBitmap;}/*** 自动回弹* 整个大小不超过控件大小的时候:* 往左边滑动,自动回弹到行号右边* 往右边滑动,自动回弹到右边* 往上,下滑动,自动回弹到顶部* <p>* 整个大小超过控件大小的时候:* 往左侧滑动,回弹到最右边,往右侧滑回弹到最左边* 往上滑动,回弹到底部,往下滑动回弹到顶部*/private void autoScroll() {float currentSeatBitmapWidth = seatBitmapWidth * getMatrixScaleX();float currentSeatBitmapHeight = seatBitmapHeight * getMatrixScaleY();float moveYLength = 0;float moveXLength = 0;//处理左右滑动的情况if (currentSeatBitmapWidth < getWidth()) {if (getTranslateX() < 0 || getMatrixScaleX() < numberWidth + spacing) {//计算要移动的距离if (getTranslateX() < 0) {moveXLength = (-getTranslateX()) + numberWidth + spacing;} else {moveXLength = numberWidth + spacing - getTranslateX();}}} else {if (getTranslateX() < 0 && getTranslateX() + currentSeatBitmapWidth > getWidth()) {} else {//往左侧滑动if (getTranslateX() + currentSeatBitmapWidth < getWidth()) {moveXLength = getWidth() - (getTranslateX() + currentSeatBitmapWidth);} else {//右侧滑动moveXLength = -getTranslateX() + numberWidth + spacing;}}}float startYPosition = screenHeight * getMatrixScaleY() + verSpacing * getMatrixScaleY() + headHeight + borderHeight;//处理上下滑动if (currentSeatBitmapHeight < getHeight()) {if (getTranslateY() < startYPosition) {moveYLength = startYPosition - getTranslateY();} else {moveYLength = -(getTranslateY() - (startYPosition));}} else {if (getTranslateY() < 0 && getTranslateY() + currentSeatBitmapHeight > getHeight()) {} else {//往上滑动if (getTranslateY() + currentSeatBitmapHeight < getHeight()) {moveYLength = getHeight() - (getTranslateY() + currentSeatBitmapHeight);} else {moveYLength = -(getTranslateY() - (startYPosition));}}}Message message = Message.obtain();MoveInfo moveInfo = new MoveInfo();moveInfo.moveXLength = moveXLength;moveInfo.moveYLength = moveYLength;message.obj = moveInfo;handler.sendMessageDelayed(message, time);}class MoveInfo {public float moveXLength;public float moveYLength;}private void autoScale() {if (getMatrixScaleX() > 2.2) {postDelayed(new AnimationScaleRunnable(scaleX, scaleY, 2.0f), SCALE_TIME);} else if (getMatrixScaleX() < 0.98) {postDelayed(new AnimationScaleRunnable(scaleX, scaleY, 1.0f), SCALE_TIME);}}int FRAME_COUNT = 10;int time = 15;int count;int SCALE_TIME = 15;Handler handler = new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message msg) {if (count < FRAME_COUNT) {count++;MoveInfo moveInfo = (MoveInfo) msg.obj;float moveXLength = moveInfo.moveXLength;float moveYLength = moveInfo.moveYLength;float xValue = moveXLength / FRAME_COUNT;float yValue = moveYLength / FRAME_COUNT;matrix.postTranslate(xValue, yValue);invalidate();Message message = Message.obtain();message.obj = msg.obj;handler.sendMessageDelayed(message, time);} else {count = 0;}return true;}});ArrayList<String> selects = new ArrayList<>();public ArrayList<String> getSelectedSeats() {return selects;}private boolean isHave(String seat) {for (String item : selects) {if (seat.equals(item)) {return true;}}return false;}private void remove(String seat) {for (int i = 0; i < selects.size(); i++) {String item = selects.get(i);if (seat.equals(item)) {selects.remove(i);break;}}}float[] m = new float[9];private float getTranslateX() {matrix.getValues(m);return m[2];}private float getTranslateY() {float[] m = new float[9];matrix.getValues(m);return m[5];}private float getMatrixScaleY() {matrix.getValues(m);return m[4];}private float getMatrixScaleX() {matrix.getValues(m);return m[0];}private float dip2Px(float value) {return getResources().getDisplayMetrics().density * value;}private float getBaseLine(Paint p, float top, float bottom) {Paint.FontMetrics fontMetrics = p.getFontMetrics();int baseline = (int) ((bottom + top - fontMetrics.bottom - fontMetrics.top) / 2);return baseline;}public class AnimationScaleRunnable implements Runnable {private float x, y;//缩放的中心点private float targetScale;private float tempScale;public AnimationScaleRunnable(float x, float y, float targetScale) {float currentScale = getMatrixScaleX();this.x = x;this.y = y;this.targetScale = targetScale;if (currentScale < targetScale) {tempScale = 1.06f;} else {tempScale = 0.95f;}}@Overridepublic void run() {matrix.postScale(tempScale, tempScale, x, y);invalidate();float currentScale = getMatrixScaleX();if (tempScale > 1 && currentScale < targetScale) {postDelayed(this, SCALE_TIME);} else if (tempScale < 1 && currentScale > targetScale) {postDelayed(this, SCALE_TIME);}}}public void setData(int row, int column) {this.row = row;this.column = column;init();invalidate();}public interface SeatChecker {/*** 是否可用座位** @param row* @param column* @return*/boolean isValidSeat(int row, int column);/*** 是否已售** @param row* @param column* @return*/boolean isSold(int row, int column);void checked(int row, int column);void unCheck(int row, int column);}}

Android安卓开发大作业---模拟电影票小程序APP相关推荐

  1. 安卓开发大作业_罗湖小程序开发制作价格低

    罗湖小程序开发制作价格低 深圳市驰骋网络技术有限公司 驰骋网络提供外观结构设计+软硬件+APP+云服务 一站式开发服务 小程序开始走入了人们的视线,由于其独特的便捷性,给我们的生活提供了非常大的帮助, ...

  2. Android安卓期末大作业 新闻app 实现注册登录增删改查功能

    Android安卓期末大作业 新闻app (文末附下载链接) app情况如下图所示: 点我下载 https://download.csdn.net/download/weixin_43474701/7 ...

  3. 微信小程序期末大作业 记单词小程序 适合初学者学习使用

    微信小程序期末大作业 记单词小程序 小程序如下图所示:(下载链接在文末) 点我下载资源 https://download.csdn.net/download/weixin_43474701/59677 ...

  4. Java开发陪玩系统源码小程序app详细介绍

    Java开发的陪玩系统源码小程序app以下是它的功能介绍: 一.用户端: 1. 用户注册与登录:用户可以使用手机号或微信登录进行注册. 2. 服务列表:用户可以浏览选择陪玩师提供的服务类型和价格,包括 ...

  5. 安卓期末大作业——仿番茄免费小说APP

    <移动应用开发实践>实践报告 APP名称: 番茄免费小说 要求: 格式:宋体,小四号字:首行缩进:行距:1.5倍. 每人独立完成Android App的设计与开发 App必须包含SOLit ...

  6. 微信小程序期末大作业 天使童装小程序

    天使童装小程序 小程序详情如下图:(下载链接在文末) 点我下载资源 https://download.csdn.net/download/weixin_43474701/60321090

  7. 微信小程序开发(三)注册小程序app.js

    文件:app.js 小程序的入口文件 app()函数,注册一个小程序,接受object参数,指定小程序的生命周期函数等. 属性 类型 描述 触发时机 onLaunch Function 小程序初始化 ...

  8. 安卓期末大作业——番茄小说APP

    安卓期末大作业--仿番茄免费小说APP <移动应用开发实践>实践报告 APP名称: 番茄免费小说 要求: 格式:宋体,小四号字:首行缩进:行距:1.5倍. 每人独立完成Android Ap ...

  9. 安卓期末大作业——Android水果连连看

    详情介绍 功能描述: 该连连看实现了基本的游戏功能,还实现了重开.提醒.背景音乐等功能,适合新手学习.搭建方法请看教菜单中的androidstudio项目搭建教程. 开发语言: java 技术框架: ...

最新文章

  1. AR的平面检测和利用SceneKit构建几何体
  2. 有点酸!中外程序员都是怎么炫富的? | 每日趣闻
  3. 第二种PHP协议,PHP多种形式,第二种使用来自First的数据
  4. 中兴被禁在全球芯片市场掀起的波澜
  5. JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档
  6. optee中User TA的加载/验签和运行
  7. 【译】权益证明的设计理念
  8. [Python人工智能] 三十.Keras深度学习构建CNN识别阿拉伯手写文字图像
  9. chrome gwt1.7_快速提示:使用Chrome开发工具调试GWT应用程序
  10. i2c-toos 交互数据_什么是CD-i(交互式光盘)?
  11. 服务器操作系统类型怎么查,服务器查看操作系统类型
  12. 电脑快捷键大全表格_办公技能:442个超实用电脑快捷键大全!
  13. mongo报错WiredTiger.wt, connection: /data/db/WiredTiger.wt: handle-open: open: Operation not permitted
  14. C++多态的练习——编写一个计算器项目
  15. MAC本地修改mysql数据库密码
  16. 英语模板作文,词组,句子,句型,开头
  17. 数据分析 | 全距和四分位距分别是什么
  18. 洗头冲水时冲下好些头发,我是要秃了吗???
  19. Elasticsearch Query DSL 整理总结(查询)
  20. Python中的多线程是假的多线程?

热门文章

  1. LaTex各种箭头的输入
  2. SE16N修改SAP标准表内容
  3. 【论文03】基于图像的动态头像实时面部动画
  4. 技术动态 | 知识图谱赋能的知识工程:理论、技术与系统
  5. 立创开源|相机赤道仪 星空摄影 星河拍摄工具低成本ARDUINO
  6. 微信小程序---点击按钮添加、删除输入框(input)
  7. 29 - 打家劫舍问题
  8. 弘辽科技:拼多多测图方式有哪些?拼多多测图方式有哪些?
  9. 开票服务器系统是否可以抵扣,税控开票系统维护费抵扣最新规定是怎样的?
  10. 计算机职业道德英语作文,2014考研英语作文经典范文:职业道德类一_跨考网