當前位置:首頁 » 安卓系統 » android3d案例

android3d案例

發布時間: 2022-11-01 19:35:49

① Android核心技術與實例詳解的前 言

Android是Google於2007年11月推出的一款開放的嵌入式操作系統平台,由於其完全開源的特性,Android正以空前的速度吸引著大批開發者的加入。為了幫助眾多的軟體開發人員盡快地掌握Android平台的相關知識,盡快地步入實際項目的開發中來,作者根據多年項目開發經驗編寫了此書。
本書既介紹了Android應用程序基本框架,也對Android平台的各種控制項進行了講解,還通過三個真實案例向讀者介紹了Android應用程序完整的開發步驟。通過本書讀者可以盡快地掌握在Android平台下進行開發的相關知識。
本書特點
1.內容飽滿,由淺入深
本書內容既包括Android平台下開發的基礎知識,也有項目編程的實用技巧,還提供了多個真實案例供讀者學習。本書在知識的層次上由淺入深,使讀者可以從Android的門外漢平穩、快速地步入Android開發的殿堂。
2.結構清晰、語言簡潔
本書中所有案例都是按照筆者的實際開發過程進行介紹的,同時也是按照真實項目的開發流程進行的,結構清晰,語言簡潔,便於實際練習。為了幫助讀者更好地理解相關知識點,全書穿插了很多實用技巧及溫馨提示。
3.實用超值的光碟
為了幫助讀者更好地掌握與實踐Android平台下應用程序的開發,本書附贈DVD光碟一張,其中包括案例的多媒體視頻、電子教案(PPT)和實例源代碼等。
4.實際商業案例
本書最後的三個案例都有實際商業價值,如果進行開發,價格要數萬元,筆者將其完整地展現給了讀者。
本書內容導讀
本書共分三篇,第一篇介紹了在Android平台下進行應用程序開發的基本知識,主要對Android應用程序框架及用戶界面的開發進行了介紹。章 名 主 要 內 容
第1章 Android開發起步 簡要說明Android平台的來歷及其特性,同時介紹了在Android平台下開發用戶界面的基本知識
第2章 Android應用程序的構成 對Android平台下的應用程序構成進行了介紹,同時還介紹了應用程序基本組件(如Activity等)的相關知識
第3章 Android布局管理器 初步介紹Android平台下用戶界面的開發,主要對布局管理器(如線性布局等的用法)進行了介紹
第4章 Android常用基本控制項 介紹了Android平台用戶界面中基本控制項(如按鈕和文本框等)的特性及其用法
第5章 Android常用高級控制項 繼續上一章的內容,對Android平台用戶界面中的高級控制項的相關知識和用法進行了介紹
第6章 菜單與對話框 介紹了Android平台選項菜單、上下文菜單和子菜單等的相關知識,同時還將各種對話框的用法進行了詳細的介紹
第7章 Android事件處理模型 對Android平台下用戶界面開發中常用到的事件處理模型進行了介紹
第二篇介紹如何在Android平台下進行高級應用程序的開發,包括游戲和基於OpenGL ES的3D應用程序的開發,以及與針對手機特性和網路服務程序的開發。
章 名 主 要 內 容
第8章 游戲與3D應用程序開發 向讀者介紹了在Android平台下進行游戲開發的相關知識,同時還對Android平台下3D應用程序的開發進行了初步介紹
第9章 消息廣播與服務 對Android平台下基於Intent的消息廣播機制進行了介紹,同時通過一個比較大的案例說明Service組件的用法
第10章 網路與數據處理 簡要介紹了在Android平台下進行網路編程的相關知識,同時還對Android平台下的SQLite等數據處理機制進行了介紹
第11章 手機通信功能開發 通過實例對Android平台下基於手機通信功能(如打電話、發簡訊和E-mail)的開發進行了介紹
第12章 手機特有Feature開發 介紹了如何基於Android平台對手機的特性進行開發,如改變壁紙、控制手機振動和音量等
第13章 桌面組件與多媒體數據採集 簡單介紹了如何在Android平台下開發包括快捷方式和實時文件夾等在內的桌面組件的流程,以及如何在程序中對多媒體數據(如音頻和圖像)等進行採集的步驟
第14章 感測器應用的開發 對Android平台下感測器的相關知識進行了簡單介紹,並通過案例來講解開發基於感測器的應用程序的步驟
第15章 Google服務 介紹了在應用程序中與Google提供的如Google Map等網路服務進行混搭的開發步驟
第三篇以三個比較大的案例來說明Android平台下大型應用的開發流程,通過這三個案例的講解,讀者對Android開發將會有更深層次的理解。
章 名 主 要 內 容
第16章 Android游戲開發實踐——快樂數獨 介紹了手機游戲《快樂數獨》的開發,通過該案例向讀者介紹了在Android平台下進行游戲開發的相關知識和基本流程,並對游戲開發中的編程技巧進行了介紹
第17章 Android地圖搜索應用——美食天下 介紹了地圖搜索應用《美食天下》的開發,該應用包括Web端和Android手機端,通過該案例向讀者介紹了在Android平台下開發大型應用的基本步驟
第18章 Android社交分享平台——口袋微博 介紹了社交分享平台《口袋微博》的開發,該平台包括Web端和Android手機端,通過該案例向讀者介紹了基於客戶端/伺服器模式的網路應用程序開發的基本步驟
本書面向的讀者
本書的內容十分詳細,幾乎涵蓋了Android相關的所有技術,並向讀者介紹了真實項目的開發流程,主要面向以下讀者。
Android初學者:本書詳細介紹了Android的基礎知識及各種控制項,並對Android平台下3D程序的開發進行了介紹,Android初學者通過本書可以快速、全面地掌握Android平台相關知識,快速地步入Android開發人員的行列。
有一定java基礎且希望學習Android開發的讀者:Android平台下的開發基於Java語言,有一定Java基礎的讀者通過閱讀本書的前半部分便可快速地掌握Android的各種組件及基礎控制項,然後通過三個真實案例的學習迅速地掌握Android平台下的應用程序開發。
在職的開發人員:本書中的案例都是作者精心挑選的,其中涉及的相關知識均是作者多年來積累的編程經驗及心得體會。具有一定開發經驗的在職開發人員可以通過本書進一步鞏固Android的基礎知識,並迅速成為高級的Android開發人員。
本書作者
吳亞峰,畢業於北京郵電大學,後留學澳大利亞卧龍崗大學取得碩士學位。1998年開始從事Java的開發,有十多年的Java開發與培訓經驗。主要的研究方向為手機游戲、Java EE、搜索引擎,現為手機游戲、Java EE獨立軟體開發工程師,同時兼任Sun授權Java培訓中心認證教師。為數十家著名企業培訓了上千名軟體開發人員,曾編寫過《Java SE 6.0編程指南》、《30天學通Java Web項目案例開發》、《Java程序員職場全攻略:從小工到專家》、《Android 2.0游戲開發實戰寶典》等暢銷技術書籍。2008年開始關注Android平台下的應用開發,並開發出一系列優秀的Android應用程序。
索依娜,畢業於燕山大學,從業於計算機軟體領域9年,在軟體開發和計算機教學方面有著豐富的經驗。工作期間曾參與省級科研項目2項、市級科研項目1項、發表論文多篇;同時為多個廠礦,企事業單位設計、開發了信息管理系統;從2008年開始關注Android平台下應用的開發,參與開發了多款手機娛樂應用。
另外,昊燃、方振宇、陳冠佐、傅奎、陳勤、梁洋洋、畢夢飛、陳慶、柴相花、陳非凡、陳華、陳嵩、承卓也參與了本書的編寫。在此表示感謝!
本書在編寫過程中得到了唐山百納科技有限公司Java培訓中心的大力支持,同時 於庭龍、魏鵬飛、王海峰及作者的家人為本書的編寫提供了很多幫助,在此表示衷心感謝!
由於編者的水平和學識有限,且書中涉及的知識較多,難免有疏漏之處,敬請廣大讀者朋友批評指正。
編者

② Android 3D游戲開發技術詳解與典型案例的本書作者

吳亞峰,本科畢業於北京郵電大學,後留學澳大利亞卧龍崗大學取得碩士學位,1998年開始從事Java應用的開發,有10多年的Java開發與培訓經驗。主要的研究方向為Open GL ES、手機游戲、Java EE、搜索引擎,同時為手機游戲、Java EE獨立軟體開發工程師,並兼任百納科技Java培訓中心首席培訓師。從2000年來為數十家著名企業培養了上千名軟體開發人員,曾編寫過《Java SE6.0編程指南》、《Java程序員職場全攻略——從小工到專家》、《Android2.0游戲開發實戰寶典》、《Android核心技術與實例詳解》等多本暢銷技術書籍。2008年初開始關注Android平台下的應用開發,並開發出一系列優秀的Android應用程序與游戲。
蘇亞光,哈爾濱理工大學碩士,有軟體領域8年的從業經歷,在軟體開發和計算機教學方面有著豐富的經驗。早期主要從事底層軟體的設計與開發工作,現主要從事ARM平台下嵌入式程序的設計、開發等方面的工作。同時,在SOA領域也做了很多有益的工作。
另外,昊燃、方振宇、陳冠佐、傅奎、陳勤、梁洋洋、畢夢飛、陳慶、柴相花、陳非凡、陳華、陳嵩、承卓也參與了本書的編寫。在此表示感謝!
致謝
本書在編寫過程中得到了唐山百納科技有限公司Java培訓中心的大力支持,同時孫佳佳、李光正、蔣召志、鄭安、田永宏、李建寶、王海峰及作者的家人為本書的編寫提供了很多幫助,在此表示衷心的感謝!
由於編者的水平和學識有限,且書中涉及的知識較多,難免有疏漏之處,敬請廣大讀者朋友批評指正,並多多提出寶貴意見。
編者

③ 求助,怎麼用android實現控制項的3D立體旋轉效果

  • 實現水平滑動,所以可在手勢抬起的時候進行判斷並處理,是滑動顯得流暢,代碼如下:

packagecom.example.rotation3dview;
importandroid.content.Context;
importandroid.graphics.Camera;
importandroid.graphics.Canvas;
importandroid.graphics.Matrix;
importandroid.util.AttributeSet;
importandroid.view.MotionEvent;
importandroid.view.VelocityTracker;
importandroid.view.View;
importandroid.view.ViewDebug.HierarchyTraceType;
importandroid.view.ViewGroup;
importandroid.widget.ImageView;
importandroid.widget.Scroller;

{
privateintmCurScreen=1;
//滑動的速度
privatestaticfinalintSNAP_VELOCITY=500;
;
privateintmWidth;
privateScrollermScroller;
privateCameramCamera;
privateMatrixmMatrix;
//旋轉的角度,可以進行修改來觀察效果
privatefloatangle=90;
publicRote3DView(Contextcontext,AttributeSetattrs){
super(context,attrs);
mScroller=newScroller(context);
mCamera=newCamera();
mMatrix=newMatrix();
initScreens();
}

publicvoidinitScreens(){
ViewGroup.LayoutParamsp=newViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
for(inti=0;i<3;i++){
this.addView(newImageView(this.getContext()),i,p);
}
((ImageView)this.getChildAt(0)).setImageResource(R.drawable.page1);
((ImageView)this.getChildAt(1)).setImageResource(R.drawable.page2);
((ImageView)this.getChildAt(2)).setImageResource(R.drawable.page3);
}

@Override
protectedvoidonLayout(booleanchanged,intl,intt,intr,intb){
intchildLeft=0;
finalintchildCount=getChildCount();
for(inti=0;i<childCount;i++){
finalViewchildView=getChildAt(i);
if(childView.getVisibility()!=View.GONE){
finalintchildWidth=childView.getMeasuredWidth();
childView.layout(childLeft,0,childLeft+childWidth,childView.getMeasuredHeight());
childLeft+=childWidth;
}
}
}

@Override
protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
finalintwidth=MeasureSpec.getSize(widthMeasureSpec);
finalintwidthMode=MeasureSpec.getMode(widthMeasureSpec);
if(widthMode!=MeasureSpec.EXACTLY){
thrownewIllegalStateException("僅支持精確尺寸");
}
finalintheightMode=MeasureSpec.getMode(heightMeasureSpec);
if(heightMode!=MeasureSpec.EXACTLY){
thrownewIllegalStateException("僅支持精確尺寸");
}
finalintcount=getChildCount();
for(inti=0;i<count;i++){
getChildAt(i).measure(widthMeasureSpec,heightMeasureSpec);
}
scrollTo(mCurScreen*width,0);
}

privatefloatmDownX;
@Override
publicbooleanonTouchEvent(MotionEventevent){
if(mVelocityTracker==null){
mVelocityTracker=VelocityTracker.obtain();
}
//將當前的觸摸事件傳遞給VelocityTracker對象
mVelocityTracker.addMovement(event);
floatx=event.getX();
switch(event.getAction()){
caseMotionEvent.ACTION_DOWN:
if(!mScroller.isFinished()){
mScroller.abortAnimation();
}
mDownX=x;
break;
caseMotionEvent.ACTION_MOVE:
intdisX=(int)(mDownX-x);
mDownX=x;
scrollBy(disX,0);
break;
caseMotionEvent.ACTION_UP:
=mVelocityTracker;
velocityTracker.computeCurrentVelocity(1000);
intvelocityX=(int)velocityTracker.getXVelocity();
if(velocityX>SNAP_VELOCITY&&mCurScreen>0){
snapToScreen(mCurScreen-1);
}elseif(velocityX<-SNAP_VELOCITY&&mCurScreen<getChildCount()-1){
snapToScreen(mCurScreen+1);
}else{
snapToDestination();
}
if(mVelocityTracker!=null){
mVelocityTracker.recycle();
mVelocityTracker=null;
}
break;
}
returntrue;
}

@Override
publicvoidcomputeScroll(){
if(mScroller.computeScrollOffset()){
scrollTo(mScroller.getCurrX(),mScroller.getCurrY());
postInvalidate();
}
}

publicvoidsnapToDestination(){
setMWidth();
finalintdestScreen=(getScrollX()+mWidth/2)/mWidth;
snapToScreen(destScreen);
}

publicvoidsnapToScreen(intwhichScreen){
whichScreen=Math.max(0,Math.min(whichScreen,getChildCount()-1));
setMWidth();
intscrollX=getScrollX();
intstartWidth=whichScreen*mWidth;
if(scrollX!=startWidth){
intdelta=0;
intstartX=0;
if(whichScreen>mCurScreen){
setPre();
delta=startWidth-scrollX;
startX=mWidth-startWidth+scrollX;
}elseif(whichScreen<mCurScreen){
setNext();
delta=-scrollX;
startX=scrollX+mWidth;
}else{
startX=scrollX;
delta=startWidth-scrollX;
}
mScroller.startScroll(startX,0,delta,0,Math.abs(delta)*2);
invalidate();
}
}

privatevoidsetNext(){
intcount=this.getChildCount();
Viewview=getChildAt(count-1);
removeViewAt(count-1);
addView(view,0);
}

privatevoidsetPre(){
intcount=this.getChildCount();
Viewview=getChildAt(0);
removeViewAt(0);
addView(view,count-1);
}

privatevoidsetMWidth(){
if(mWidth==0){
mWidth=getWidth();
}
}
}
  • 實現立體效果,添加如下代碼:

/*
*當進行View滑動時,會導致當前的View無效,該函數的作用是對View進行重新繪制調用drawScreen函數
*/
@Override
protectedvoiddispatchDraw(Canvascanvas){
finallongdrawingTime=getDrawingTime();
finalintcount=getChildCount();
for(inti=0;i<count;i++){
drawScreen(canvas,i,drawingTime);
}
}

publicvoiddrawScreen(Canvascanvas,intscreen,longdrawingTime){
//得到當前子View的寬度
finalintwidth=getWidth();
finalintscrollWidth=screen*width;
finalintscrollX=this.getScrollX();
//偏移量不足的時
if(scrollWidth>scrollX+width||scrollWidth+width<scrollX){
return;
}
finalViewchild=getChildAt(screen);
finalintfaceIndex=screen;
finalfloatcurrentDegree=getScrollX()*(angle/getMeasuredWidth());
finalfloatfaceDegree=currentDegree-faceIndex*angle;
if(faceDegree>90||faceDegree<-90){
return;
}
finalfloatcenterX=(scrollWidth<scrollX)?scrollWidth+width
:scrollWidth;
finalfloatcenterY=getHeight()/2;
finalCameracamera=mCamera;
finalMatrixmatrix=mMatrix;
canvas.save();
camera.save();
camera.rotateY(-faceDegree);
camera.getMatrix(matrix);
camera.restore();
matrix.preTranslate(-centerX,-centerY);
matrix.postTranslate(centerX,centerY);
canvas.concat(matrix);
drawChild(canvas,child,drawingTime);
canvas.restore();
}

    ④ 求《Android 3D游戲開發技術詳解與典型案例》書中源代碼,萬分感謝!!

    請問有電子版的?郵箱 [email protected] 多謝!

    ⑤ android 3d畫廊(轉)

    public class GalleryActivity2extends AppCompatActivity {

    private LayoutInflatermLayoutInflater;

        private ViewPagermVp;

        private int[]mImg =new int[]{R.mipmap.pic4, R.mipmap.pic5, R.mipmap.pic6, R.mipmap.pic4, R.mipmap.pic5};

        @Override

        protected void onCreate(@Nullable Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_gallery);

            mLayoutInflater = LayoutInflater.from(this);

            mVp = (ViewPager) findViewById(R.id.vp_gallery_vp);

            mVp.setAdapter(new MyAdapter());

            mVp.setOffscreenPageLimit(mImg.length);//設置預載入數量

            mVp.setPageMargin(-150);//控制兩幅圖之間的間距

            mVp.setPageTransformer(true, new ZoomOutPageTransformer());

            //viewPager左右兩邊滑動無效的處理

            findViewById(R.id.ll_gallery_outer).setOnTouchListener(new View.OnTouchListener() {

    @Override

                public boolean onTouch(View view, MotionEvent motionEvent) {

    return mVp.dispatchTouchEvent(motionEvent);

                }

    });

        }

    class MyAdapterextends PagerAdapter {

    @Override

            public int getCount() {

    return mImg.length;

            }

    @Override

            public boolean isViewFromObject(View view, Object object) {

    return view == object;

            }

    @Override

            public ObjectinstantiateItem(ViewGroup container, final int position) {

    View view =mLayoutInflater.inflate(R.layout.item_img, container, false);

                ImageView img = view.findViewById(R.id.img_item_img);

                //img.setImageResource(R.mipmap.sea);

                img.setImageResource(mImg[position]);

                img.setScaleType(ImageView.ScaleType.CENTER_CROP);

                img.setOnClickListener(new View.OnClickListener() {

    @Override

                    public void onClick(View v) {

    Toast.makeText(GalleryActivity2.this, "" +position, Toast.LENGTH_SHORT).show();

                    }

    });

                container.addView(view);

                return view;

            }

    @Override

            public void destroyItem(ViewGroup container, int position, Object object) {

    container.removeView((View) object);

            }

    }

    //設置切換動畫

    public class ViewPager.PageTransformer {

    //自由控制縮放比例

        private static final float MAX_SCALE =1f;

        private static final float MIN_SCALE =0.6f;//0.85f

        @Override

        public void transformPage(View page, float position) {

    if (position <=1) {

    float scaleFactor =MIN_SCALE + (1 - Math.abs(position)) * (MAX_SCALE -MIN_SCALE);

                page.setScaleX(scaleFactor);

                if (position >0) {

    page.setTranslationX(-scaleFactor *2);

                }else if (position <0) {

    page.setTranslationX(scaleFactor *2);

                }

    page.setScaleY(scaleFactor);

            }else {

    page.setScaleX(MIN_SCALE);

                page.setScaleY(MIN_SCALE);

            }

    }

    }

    activity_gallery.xml

        android:id="@+id/ll_gallery_outer"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:clipChildren="false"

        android:orientation="vertical">

            android:id="@+id/vp_gallery_vp"

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:layout_margin="50dp"

            android:clipChildren="false" />

    item_img.xml

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:gravity="center"

        android:orientation="vertical">

            android:id="@+id/img_item_img"

            android:layout_width="200dp"

            android:scaleType="centerCrop"

            android:layout_height="100dp"

            android:src="@mipmap/pic4" />

    ⑥ Android OpenGLES2.0(十六)——3D模型貼圖及光照處理(obj+mtl)

    在Android OpenGLES2.0(十四)——Obj格式3D模型載入中實現了Obj格式的3D模型的載入,載入的是一個沒有貼圖,沒有光照處理的帽子,為了呈現出立體效果,「手動」加了光照,擁有貼圖的紋理及光照又該怎麼載入呢?

    本篇博客例子中載入的是一個卡通形象皮卡丘,資源是在網上隨便找的一個。載入出來如圖所示:

    obj內容格式如下:

    mtl文件內容格式如下:

    關於Obj的內容格式,在上篇博客中已經做了總結,本篇博客中使用的obj,可以看到f後面的不再跟的是4個數字,而是 f 2/58/58 3/59/59 17/60/60 這種樣子的三組數,每一組都表示為頂點坐標索引/貼圖坐標點索引/頂點法線索引,三個頂點組成一個三角形。而頭部的 mtllib pikachu.mtl 則指明使用的材質庫。
    而mtl格式文件中,主要數據類型為:

    模型載入和之前的模型載入大同小異,不同的是,這次我們需要將模型的貼圖坐標、頂點法線也一起載入,並傳入到shader中。其他參數,有的自然也要取到。
    模型載入以obj文件為入口,解析obj文件,從中獲取到mtl文件相對路徑,然後解析mtl文件。將材質庫拆分為諸多的單一材質。obj對象的 載入,根據具使用材質不同來分解為多個3D模型。具體載入過程如下:

    頂點著色器

    片元著色器

    完成了以上准備工作,就可以調用 readMultiObj 方法,將obj文件讀成一個或多個帶有各項參數的3D模型類,然後將每一個3D模型的參數傳入shader中,進而進行渲染:

    ⑦ 求《Android 3D游戲開發技術詳解與典型案例》書中源代碼,萬分感謝!!

    游戲開發引擎本身就是一個成熟的固有框架,這東西哪裡都有啊,去專業論壇找吧,除非你從零開始寫代碼

    ⑧ 《Android3D游戲開發技術寶典OpenGLES2.0》pdf下載在線閱讀,求百度網盤雲資源

    《Android 3D游戲開發技術寶典》(吳亞峰)電子書網盤下載免費在線閱讀

    資源鏈接:

    鏈接:https://pan..com/s/1A5S0LK7aslncrVbBQAJ5Rg

    密碼:2xnw

    書名:Android 3D游戲開發技術寶典

    作者:吳亞峰

    出版年份:2012-5

    頁數:749

    內容簡介:

    《Android 3D游戲開發技術寶典:OpenGL ES 2.0》內容簡介:隨著智能手機移動嵌入式平台硬體性能的不斷提升,3D游戲應用也逐漸普及開來。《Android 3D游戲開發技術寶典:OpenGL ES 2.0》結合作者多年從事3D游戲應用開發的寶貴經驗,全面介紹了與Android平台相關的必知必會的基礎知識及大型完整3D案例,講解上由淺入深,循序漸進,起點低、終點高,既適合初學者學習,也適合有一定基礎的讀者進一步提升之用。另外,由於OpenGL ES2.0的著色語言通用於各種移動嵌入式平台,因此,《Android 3D游戲開發技術寶典:OpenGL ES 2.0》中與著色器開發相關的60%左右的內容還可供iPhone、Windows Mobile、MeeGoo等平台的開發人員參考。全書共22章,其中第1章與第2章為Android平台相關的一些基礎知識;第3章~第10章介紹了基於OpenGL ES2.0進行3D應用開發的一些必知必會的基本知識;第11章~第15章介紹了一些高級特效的實現方法;第16章~第17章介紹了3D游戲開發中相關的一些物理、碰撞檢測知識以及常用的3D物理引擎JBullet:第19章介紹了3種人機交互的高級技術;第20章~第22章給出了3個完整的大型3D游戲案例,總代碼量接近6萬行。同時為了便於讀者的學習,《Android 3D游戲開發技術寶典:OpenGL ES 2.0》附贈的光碟中包含了書中所有案例的完整源代碼,同時給出了最後3個完整大型3D游戲案例的講解視頻,最大限度地幫助讀者快速掌握相應的開發技術。

    熱點內容
    區塊鏈數據存儲系統 發布:2025-03-05 10:50:18 瀏覽:581
    qq重設密碼後為什麼還沒有解封 發布:2025-03-05 10:49:34 瀏覽:130
    cmd無法訪問 發布:2025-03-05 10:09:47 瀏覽:523
    pythonfor換行 發布:2025-03-05 09:51:44 瀏覽:710
    yum內核源碼 發布:2025-03-05 09:27:41 瀏覽:94
    x86編程 發布:2025-03-05 09:24:22 瀏覽:173
    怎麼支付寶信用卡提現密碼 發布:2025-03-05 09:21:20 瀏覽:119
    月神腳本圈 發布:2025-03-05 09:13:44 瀏覽:178
    62批量操作腳本 發布:2025-03-05 08:52:57 瀏覽:610
    java證書加密 發布:2025-03-05 08:45:44 瀏覽:240