五百丁簡歷模板官方網(wǎng)站互聯(lián)網(wǎng)營銷師報名入口
一、項目概述
歡迎來到創(chuàng)意之源!我們精心打造的繪圖應(yīng)用程序?qū)氵M入一個充滿藝術(shù)和技術(shù)的奇妙世界。通過使用Android Studio,我們實現(xiàn)了繪制貝塞爾曲線的功能,讓你能夠輕松創(chuàng)作出令人驚嘆的藝術(shù)作品。不論你是熱愛繪畫的大學(xué)生還是渴望學(xué)習(xí)的藝術(shù)愛好者,這個應(yīng)用程序?qū)槟泓c燃創(chuàng)作的激情,讓你沉浸在繪畫的樂趣中。
二、主要技術(shù)點
- 貝塞爾曲線的繪制:我們巧妙地利用Android Studio的繪圖功能,實現(xiàn)了貝塞爾曲線的繪制。通過簡單的操作,你可以自由操控曲線的形狀和曲率,為你的藝術(shù)作品注入無限可能。
- JSON數(shù)據(jù)解析:我們應(yīng)用程序支持JSON數(shù)據(jù)解析,讓你能夠輕松處理服務(wù)器返回的數(shù)據(jù)。這樣,你可以從服務(wù)器獲取配置文件等信息,并在繪畫過程中靈活應(yīng)用。
- 本地文件存取:我們還提供了本地文件存取功能,讓你可以保存和管理自己的繪畫作品。你可以在應(yīng)用程序中隨時查看、編輯和分享你的藝術(shù)杰作。
- 全屏啟動頁實現(xiàn):我們特別優(yōu)化了應(yīng)用程序的啟動頁,實現(xiàn)了無縫過渡,避免了白屏的尷尬。你將享受到完美的用戶體驗,讓你的創(chuàng)作之旅更加流暢自然。
-
動態(tài)權(quán)限申請:我們重視用戶隱私和安全,因此應(yīng)用程序支持動態(tài)權(quán)限申請。這意味著在使用過程中,我們將確保你對所需權(quán)限的控制,保護你的個人信息和設(shè)備安全。
-
HTTPS通信:我們采用HTTPS通信協(xié)議,保證你的數(shù)據(jù)傳輸安全和隱私保護。無論是進行GET請求還是POST請求,你都可以放心地與服務(wù)器進行安全的數(shù)據(jù)交互。
-
通用隱私協(xié)議服務(wù)協(xié)議彈出窗口:我們關(guān)注用戶隱私權(quán),為了保障你的合法權(quán)益,我們在應(yīng)用程序中提供了通用隱私協(xié)議服務(wù)協(xié)議彈出窗口。這讓你清晰了解我們對你個人信息的處理方式,建立起互信的基礎(chǔ)。
-
從服務(wù)器獲取配置文件,并解析:我們的應(yīng)用程序能夠從服務(wù)器動態(tài)獲取配置文件,并進行解析。這使你能夠隨時更新應(yīng)用程序的功能和特性,保持與最新技術(shù)的同步。
-
AgentWeb的使用和封裝:我們采用了大名鼎鼎的AgentWeb,一行代碼即可實現(xiàn)專屬瀏覽器的功能。這為你提供了便捷的網(wǎng)絡(luò)瀏覽和搜索功能,讓你在創(chuàng)作中獲得更多靈感和參考。
-
本地日志接口的封裝:我們?yōu)閼?yīng)用程序封裝了本地日志接口,使你可以靈活地記錄和管理應(yīng)用程序的運行情況。在發(fā)布版本時,你可以根據(jù)需要關(guān)閉日志記錄,優(yōu)化代碼性能。
主要演示代碼:
//PanelView.java
package com.csw.luck33;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;public class PanelView extends View {private static final String TAG = "PanelView";private Board mBoard;private Dot mDotStart;private Dot mDotControl1;private Dot mDotControl2;private Dot mDotEnd;private Paint mControlPaint;private Paint mBezierPaint;private Paint mTextPaint;public PanelView(Context context, AttributeSet attrs) {super(context, attrs);mBoard = new Board();mDotStart = new Dot(this, mBoard, true);mDotControl1 = new Dot(this, mBoard, false);mDotControl2 = new Dot(this, mBoard, false);mDotEnd = new Dot(this, mBoard, true);mControlPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mControlPaint.setColor(Color.GREEN);mControlPaint.setStyle(Paint.Style.STROKE);mControlPaint.setStrokeWidth(5f);mBezierPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mBezierPaint.setColor(Color.BLUE);mBezierPaint.setStyle(Paint.Style.STROKE);mBezierPaint.setStrokeWidth(6f);mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mTextPaint.setColor(Color.BLACK);mTextPaint.setStyle(Paint.Style.FILL_AND_STROKE);mTextPaint.setStrokeWidth(2);mTextPaint.setTextSize(30);}@Overridepublic boolean onTouchEvent(MotionEvent event) {//Log.d(TAG, "onTouchEvent:" + event.getAction() + "(" + event.getX() + "," + event.getY() + ")");return mDotStart.touchEvent(event)|| mDotControl1.touchEvent(event)|| mDotControl2.touchEvent(event)|| mDotEnd.touchEvent(event);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);mBoard.computeWidthAndHeight(this);mDotStart.setCenterPoint(mBoard.getTopLeft());mDotControl1.setCenterPoint(mBoard.getTopCenter());mDotControl2.setCenterPoint(mBoard.getBottomCenter());mDotEnd.setCenterPoint(mBoard.getBottomRight());}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);mBoard.draw(canvas);drawBezierText(mDotStart, mDotControl1, mDotControl2, mDotEnd, canvas);drawLine(mDotStart, mDotControl1, canvas);drawLine(mDotControl1, mDotEnd, canvas);drawLine(mDotStart, mDotControl2, canvas);drawLine(mDotControl2, mDotEnd, canvas);drawBezier(mDotStart, mDotControl1, mDotControl2, mDotEnd, canvas);mDotStart.draw(canvas);mDotControl1.draw(canvas);mDotControl2.draw(canvas);mDotEnd.draw(canvas);}private void drawLine(Dot start, Dot end, Canvas canvas) {canvas.drawLine(start.getX(), start.getY(), end.getX(), end.getY(), mControlPaint);}private Path mBezierPath = new Path();private void drawBezier(Dot start, Dot control1, Dot control2, Dot end, Canvas canvas) {mBezierPath.reset();mBezierPath.moveTo(start.getX(), start.getY());mBezierPath.cubicTo(control1.getX(), control1.getY(), control2.getX(), control2.getY(), end.getX(), end.getY());canvas.drawPath(mBezierPath, mBezierPaint);}private void drawBezierText(Dot start, Dot control1, Dot control2, Dot end, Canvas canvas) {canvas.drawText("moveTo( " + start.mCenterPointVirtual.x + " , " + start.mCenterPointVirtual.y + " );"+ " cubicTo(" + control1.mCenterPointVirtual.x + " , " + control1.mCenterPointVirtual.y + " , "+ control2.mCenterPointVirtual.x + " , " + control2.mCenterPointVirtual.y + " , "+ end.mCenterPointVirtual.x + " , " + end.mCenterPointVirtual.y+ " );", mBoard.getTopLeft().x / 2f, mBoard.getTopLeft().y / 2f, mTextPaint);}
}
三、開發(fā)環(huán)境
開發(fā)環(huán)境是 Android Studio 最新版本,只要從官網(wǎng)下載最新的即可編譯運行 。
jdk 版本是 17 ,sdk 版本31,gradle plugin version 4.2.2 ,gradle version 版本6.7.1 。
四、運行演示
1、啟動程序,首先是1s的啟動界面。
2、進入主界面
現(xiàn)在下載源碼,讓Android Studio與你的藝術(shù)夢想相遇,一起創(chuàng)造屬于你自己的獨特世界~