Android開發(fā)初體驗

1.程序目錄介紹
程序目錄介紹.png

2.Activity類

Activity是一個應用組件盐固,用戶可與其提供的屏幕進行交互。 每個 Activity 都會獲得一個用于繪制其用戶界面的窗口混巧。窗口通常會充滿屏幕,但也可小于屏幕并浮動在其他窗口之上怨咪。

一個應用通常由多個彼此松散聯(lián)系的 Activity 組成拭荤。 一般會指定應用中的某個 Activity 為“主”Activity,即首次啟動應用時呈現(xiàn)給用戶的那個 Activity震叮。

Android里面大部分的控件都會提供很多方法胧砰,這些方法只需要自己去重寫,不需要自己調(diào)用冤荆。

Activity 實際就是一個界面朴则,管理一個界面從創(chuàng)建,運行到結(jié)束的整個過程 / 生命周期。

2.1Activity的生命周期圖
Activity的狀態(tài)轉(zhuǎn)換.png
2.2Activity生命周期的回調(diào)方法
  • onCreate()

這個方法是系統(tǒng)調(diào)用的乌妒,首次創(chuàng)建 Activity 時調(diào)用汹想,始終后接 onStart()。

  • onStart()

在 Activity 即將對用戶可見之前調(diào)用撤蚊。
如果 Activity 轉(zhuǎn)入前臺古掏,則后接 onResume(),如果 Activity 轉(zhuǎn)入隱藏狀態(tài)侦啸,則后接 onStop()槽唾。

  • onResume()

在 Activity 即將開始與用戶進行交互之前調(diào)用。
此時光涂,Activity 處于 Activity 堆棧的頂層庞萍,并具有用戶輸入焦點。始終后接 onPause()忘闻。

  • onPause()

當系統(tǒng)即將開始繼續(xù)另一個 Activity 時調(diào)用钝计。

此方法通常用于確認對持久性數(shù)據(jù)的未保存更改、停止動畫以及其他可能消耗 CPU 的內(nèi)容齐佳,諸如此類私恬。

它應該非常迅速地執(zhí)行所需操作,因為它返回后炼吴,下一個 Activity 才能繼續(xù)執(zhí)行本鸣。
如果 Activity 返回前臺,則后接 onResume()硅蹦,如果 Activity 轉(zhuǎn)入對用戶不可見狀態(tài)荣德,則后接onStop()。

  • onStop()

在 Activity 對用戶不再可見時調(diào)用提针。
如果 Activity 被銷毀命爬,或另一個 Activity(一個現(xiàn)有 Activity 或新 Activity)繼續(xù)執(zhí)行并將其覆蓋,就可能發(fā)生這種情況辐脖。
如果 Activity 恢復與用戶的交互饲宛,則后接 onRestart(),如果 Activity 被銷毀嗜价,則后接onDestroy()艇抠。

  • onDestroy()

在 Activity 被銷毀前調(diào)用。這是 Activity 將收到的最后調(diào)用久锥。

當 Activity 結(jié)束(有人對 Activity 調(diào)用了 finish())家淤,或系統(tǒng)為節(jié)省空間而暫時銷毀該 Activity 實例時,可能會調(diào)用它瑟由。 可以通過 isFinishing() 方法區(qū)分這兩種情形絮重。

  • onRestart()

在 Activity 已停止并即將再次啟動前調(diào)用。始終后接 onStart()。

2.3Activity的這些方法在一些情況的調(diào)用
  • 界面啟動:
    onCreate()
    onStart()
    onResume()

  • 點擊home鍵青伤,回到主界面:
    onPause()

  • 通過后臺重新運行這個程序:
    onRestart()
    onStart()
    onResume()

  • 使用返回鍵督怜,返回到主界面:
    onPause()
    onDestroy()

3.界面布局方式

3.1. xml配置

默認一個Activity對應一個xml配置文件。
xml配置文件命名特點:activity_界面功能.xml狠角。
xml文件就是一個容器:可以放很多UI控件的容器号杠。
當有很多控件時該如何布局?布局方法:
1.約束布局 ConstraintLayout
2.線性布局 LinearLayout 垂直 水平
3.相對布局 RelativeLayout
4.幀布局 FrameLayout
5.表格布局 TableLayout GridLayout
6.絕對布局 AbsoluteLayout

XML布局的常見屬性
xml布局屬性.png
3.2. 使用Java代碼創(chuàng)建

通過代碼來布局界面:
<1>.使用幀布局方式FrameLayout丰歌,在xml布局文件類里面將布局方式改為FrameLayout姨蟋,并在容器資源里添加一個id號,以便通過id號找到這個容器資源

java代碼布局.png

<2>.在app->java->MainActivity文件里面進行代碼布局
1.找一個容器
2.創(chuàng)建一個子視圖
3.設置當前這個界面的內(nèi)容視圖為這個容器
代碼布局界面.png

3.3什么時候需要用代碼創(chuàng)建立帖?什么時候使用xml配置眼溶?

如果添加的控件是靜態(tài)的(變化的東西不多),選擇xml配置厘惦。xml布局控件間耦和性更低偷仿,布局更方便哩簿,安卓開發(fā)里面經(jīng)常使用宵蕉。

如果需要靈活地操作這個控件 ,選擇代碼創(chuàng)建节榜。

4.控件

控件是指對數(shù)據(jù)和方法的封裝羡玛。一個控件就是一個類的具體對象

控件可以有自己的屬性方法宗苍,其中屬性是控件數(shù)據(jù)的簡單訪問者稼稿,方法則是控件的一些簡單而可見的功能、控件創(chuàng)建過程包括設計讳窟、開發(fā)让歼、調(diào)試(就是所謂的3Ds開發(fā)流程,即Design、Develop丽啡、Debug)工作谋右, 然后是控件的使用。

因為控件是可見的补箍,一個控件就相當于一個視圖改执。對控件的學習分為兩個階段:基礎階段和高級階段。
基礎階段主要是學習系統(tǒng)自帶的控件坑雅,對系統(tǒng)控件要比較熟悉運用辈挂,系統(tǒng)自帶的控件有 TextView,EditText裹粤,Button终蒂,ImageView,ListView,RecycleView拇泣,ScrollView悉尾,ViewPager,ProgressBa挫酿,Switch等构眯。
高級階段主要是學習自定義控件。包括在已有的控件基礎上加上自己的功能早龟,學會自己自己畫或者設置一個控件惫霸。

4.1父視圖與子視圖

將一個控件添加到一個容器中,控件就是這個容器的子視圖葱弟,容器就是這個控件的父視圖壹店。

4.2控件的尺寸設置
  1. match_parent 和父視圖一樣大
  2. wrap_content 包裹內(nèi)容,和控件的內(nèi)容一樣大
  3. 自己寫一個具體尺寸芝加,例如20dp硅卢。(dp為單位)
控件尺寸單位
  • dp (dip): 即設備無關像素(device independent pixels),這種尺寸單位在不同設備上的物理大小相同藏杖。
  • px:即像素(pixel)将塑。
  • pt:通常用來作為字體的尺寸單位,1 pt相當于1/72英寸蝌麸。
  • inch:英寸点寥,1 英寸約等于2.54厘米,主要用來描述手機屏幕的大小来吩。
  • sp:通常用作字體的尺寸單位敢辩,實際大小還與具體設備上的用戶設定有關。

5.Demo:

使用圖片布局弟疆,在圖片上滑動可以改變圖片像素戚长。
1.創(chuàng)建兩張圖片視圖的控件

在res->layout->activity_main.xml 的文件里面布局,其中圖片放在res->drawable文件里面怠苔。

  //設置背景圖片
<ImageView
        android:layout_width="match_parent"    
        android:layout_height="match_parent"
        android:src="@drawable/bg"/>

//設置前景圖片
<ImageView
        android:id="@+id/iv_foreground"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

上面通過id號可以唯一標識某一個控件或者組件(容器):android:id="@+id/iv_foreground"

2. 下面在app->java->MainActivity文件里面配置界面同廉,找到圖片視圖的控件:
 //配置界面
setContentView(R.layout.activity_main);

 //找到容器里面的圖片視圖控件
foreground = findViewById(R.id.iv_foreground);
3.讀取原圖,將需要操作的圖片讀取出來

decodeResource 從工程的資源路徑中去生成一張位圖
getResource() 獲取工程的資源
R.drawable.fr 訪問資源路徑下 drawable里面的一個文件名為fr的圖片

 //將需要操作的圖片讀取出來
 //decodeResource 從工程的資源路徑中去生成一張位圖
//getResource() 獲取工程的資源
//R.drawable.fr 訪問資源路徑下 drawable里面的一個文件名為fr的圖片
orgBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.fr);
4.創(chuàng)建副本

操作這張圖片實際就是用透明色去替換某個位置的顏色嘀略,但是不能操作原圖恤溶,只能copy一份,創(chuàng)建一個和原始圖片相同環(huán)境的空位圖帜羊。

//創(chuàng)建一個和原始圖片相同環(huán)境的空位圖
copyBitmap = Bitmap.createBitmap(orgBitmap.getWidth(),orgBitmap.getHeigh(),orgBitmap.getConfig());
5.對圖片進行相應操作

創(chuàng)建一個Canvas 畫布-現(xiàn)實中的畫板:

//創(chuàng)建一個Canvas 畫布-現(xiàn)實中的畫板
canvas = new Canvas(copyBitmap);

創(chuàng)建一個畫筆:

//創(chuàng)建一個畫筆
paint = new Paint();

創(chuàng)建一個矩陣:

//創(chuàng)建一個矩陣
Matrix matrix = new Matrix();

畫一幅圖:

 //畫一幅圖
canvas.drawBitmap(orgBitmap,matrix,paint);

顯示圖片:

//顯示圖片
foreground.setImageBitmap(copyBitmap);
6.添加觸摸事件

給前景圖片添加touch事件咒程,當有觸摸事件發(fā)生,系統(tǒng)就會將這個事件接收并回調(diào)這個事件

foreground.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                //獲取當前事件
                int action = event.getAction();

                //判斷狀態(tài)
                if (action == MotionEvent.ACTION_MOVE){
                    //獲取觸摸點的坐標
                    int x = (int) event.getX();
                    int y = (int) event.getY();

                    //替換x讼育,y對應的像素
                    for (int i = -8; i < 8; i++) {
                        for (int j = -8; j < 8; j++) {
                            copyBitmap.setPixel(x+i,y+j,Color.TRANSPARENT);
                        }
                    }
                    foreground.setImageBitmap(copyBitmap);
                }
                return true;
            }
});
上面用到的一些屬性定義為全局屬性帐姻,放在onCreate()方法上面:
ImageView foreground;
Bitmap orgBitmap;
Bitmap copyBitmap;
Canvas canvas;
Paint paint;

通過這些步稠集,這個demo的功能就可以實現(xiàn)了,接下來就可以運行看效果如何饥瓷。

:上面創(chuàng)建一個矩陣剥纷,可以通過矩陣對圖片進行旋轉(zhuǎn)、平移呢铆、翻轉(zhuǎn)等操作:
 //旋轉(zhuǎn)圖片
matrix.setRotate(90,240,400);
//平移
matrix.setTranslate(100,30);
 //翻轉(zhuǎn) set只作用一次 post作用多次
matrix.setScale(-1f,1f);
matrix.postTranslate(orgBitmap.getWidth(),0);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晦鞋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子棺克,更是在濱河造成了極大的恐慌悠垛,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娜谊,死亡現(xiàn)場離奇詭異确买,居然都是意外死亡,警方通過查閱死者的電腦和手機纱皆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門湾趾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人派草,你說我怎么就攤上這事搀缠。” “怎么了澳眷?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵胡嘿,是天一觀的道長。 經(jīng)常有香客問我钳踊,道長,這世上最難降的妖魔是什么勿侯? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任拓瞪,我火速辦了婚禮,結(jié)果婚禮上助琐,老公的妹妹穿的比我還像新娘祭埂。我一直安慰自己,他們只是感情好兵钮,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布蛆橡。 她就那樣靜靜地躺著,像睡著了一般掘譬。 火紅的嫁衣襯著肌膚如雪泰演。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天葱轩,我揣著相機與錄音睦焕,去河邊找鬼藐握。 笑死,一個胖子當著我的面吹牛垃喊,可吹牛的內(nèi)容都是我干的猾普。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼本谜,長吁一口氣:“原來是場噩夢啊……” “哼初家!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乌助,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤笤成,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后眷茁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炕泳,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡虫埂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年缴川,在試婚紗的時候發(fā)現(xiàn)自己被綠了土思。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胜宇。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡烂斋,死狀恐怖扒最,靈堂內(nèi)的尸體忽然破棺而出乾蓬,到底是詐尸還是另有隱情施戴,我是刑警寧澤纸俭,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布皇耗,位于F島的核電站,受9級特大地震影響揍很,放射性物質(zhì)發(fā)生泄漏郎楼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一窒悔、第九天 我趴在偏房一處隱蔽的房頂上張望呜袁。 院中可真熱鬧,春花似錦简珠、人聲如沸阶界。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膘融。三九已至,卻和暖如春祭玉,著一層夾襖步出監(jiān)牢的瞬間氧映,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工攘宙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留屯耸,地道東北人拐迁。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像疗绣,于是被迫代替她去往敵國和親线召。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容