1.收獲
今天是我們進(jìn)入Android的第一天,今天是很有趣的一天继榆,做了一個(gè)非常有趣的demo,雖然在這個(gè)項(xiàng)目中有的東西沒有學(xué)過巾表,但是還是能夠理解,確實(shí)今天比以往的課更加有趣和活躍略吨,不是那么單一集币。一切開始變得有趣起來了,做什么都有了精神翠忠,雖然都還是學(xué)的是一些基礎(chǔ)的東西鞠苟,但是我明白這些越是基礎(chǔ)的東西越重要,就越要好好學(xué)秽之,后面的日子還長当娱,還有更多的東西等著我們!
2.技術(shù)
(1)程序目錄介紹
(2)Activerty生命周期
(3)xml配置和布局
(4)“撕衣服”小游戲demo
3.技術(shù)的實(shí)際應(yīng)用和實(shí)踐
(1)程序目錄介紹
在這里展示出了一個(gè)Android程序的基本的一些東西考榨,包括一些文件的作用跨细,如何添加一些圖片,如何修改demo 的名稱和圖標(biāo)河质。
(2)Activerty生命周期
什么是Activerty=就是一個(gè)界面冀惭,管理一個(gè)界面從創(chuàng)建到運(yùn)行到結(jié)束的整個(gè)過程 / 生命周期。
在Android里面大部分的控件都會(huì)提供很多方法, 這些方法只是需要自己去重新寫掀鹅,不需要自己調(diào)用.
在實(shí)際的操作中這些方法都是要被調(diào)用的散休,只是操作不同乐尊,調(diào)用的方法不同。
(3)xml配置和布局
使用兩種方式界面布局
- 1.xml配置
- 2.使用Java代碼創(chuàng)建
默認(rèn)一個(gè)Activerty 對(duì)應(yīng)一個(gè)xml配置文件
命名特點(diǎn):activerty_界面的功能.xml
xml文件就是一個(gè)容器 可以放很多UI控件
布局:這么多的控件如何布局
----- 布局方式:
- 1.約束布局 ContraintLayout
- 2.線性布局 LinearLayout 垂直 水平
- 3.相對(duì)布局 RelativeLayout
- 4.幀布局 FrameLayout
- 5.表格布局 TableLayout GridLayout
-
6.絕對(duì)布局 AbsoluteLayout
image.png
image.png
xml 文件配置界面
xml 文件田間控件
一個(gè)控件就是一個(gè)類的具體對(duì)象
ImageView:
- 屬性
- 方法
控件的尺寸
父視圖 和子視圖:將一個(gè)控件添加到一個(gè)容器中昏滴,控件就是這個(gè)容器的子視圖
容器就是這個(gè)控件的父視圖
- 1.match_parent 和父視圖一樣大
- 2.wrap_content 包裹內(nèi)容 和控件一樣大
- 3.20dp 具體尺寸
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/bg"/>
控件 = 一個(gè)視圖 = 看到的都是視圖
- 1.初級(jí)階段:學(xué)習(xí)系統(tǒng)自帶的控件 熟悉
TextView EditView Button *ImageView *ListView
RecycleView ScrollView ViewPager *ProgressBar
Switch - 2.高級(jí)階段:自定義
- (1)在已有的控件基礎(chǔ)上加上自己的功能 繼承
- (2)自己畫
程序或者UI模塊都可以由自己的樣式style
- 可以在values.styles.xml里面定義
- 不需要ActionBar
-
parent="Theme.AppCompat.Light.NoActionBar"
image.png
有Java代碼來布局界面
- 通過添加id號(hào)可以唯一標(biāo)識(shí)某一個(gè)控件 或者 組件(容器)
- andriod:id="@+id/fl_main"
<ImageView
android:id="@+id/iv_forgroud"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
更改主題樣式
xml:解耦 安卓推薦使用
- 什么時(shí)候需要代碼創(chuàng)建 什么時(shí)候使用xml配置
- 如果添加的控件是靜態(tài)的 (變化的東西不多) 選擇xml配置
-
如果需要靈活地操作這個(gè)控件 選擇代碼創(chuàng)建
image.png
更改App名稱
(4)“撕衣服”小游戲demo
思路:
- 使用透明色去替換原圖片地對(duì)應(yīng)點(diǎn)的像素
- 立刻獲取替換之后的圖片 將圖片顯示在ImageView上
我們要準(zhǔn)備兩張圖片將他們添加到資源文件中去谣殊,操作是直接把圖片拖到
首先我們要在xml文件中添加控件
背景圖片:
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/bg"/>
操作后的圖片
<ImageView
android:id="@+id/iv_forgroud"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
在MainActivity中配置界?
//配置界面
setContentView(R.layout.activity_main);
//找到容器里面的圖片視圖控件
//findViewByid
final ImageView forgound=findViewById(R.id.iv_forgroud);
讀取原圖
//將需要操作的圖片讀取出來 Bitmap
//BitmapFactory 用于管理位圖
//decodeResource 從工程的資源路徑中去生成一張位圖
//getResources() 獲取工程的資源
//R.drawable.fr 訪問資源路徑下 drawable里面的一個(gè)文件名為fr的資源
final Bitmap orgBitmap= BitmapFactory.decodeResource(getResources(),R.drawable.fr);
創(chuàng)建副本
//操作這張圖片 用透明色去替換某個(gè)位置的顏色
//不能操作原圖 只能拷貝一份
//創(chuàng)建一個(gè)副本 創(chuàng)建一個(gè)和原始圖片相同環(huán)境的空位圖
final Bitmap copyBitmap=Bitmap.createBitmap(orgBitmap.getWidth(),orgBitmap.getHeight(),orgBitmap.getConfig());
圖?片操作
//創(chuàng)建一個(gè)Canvas 畫布-現(xiàn)實(shí)中的畫板
final Canvas canvas=new Canvas(copyBitmap);
//創(chuàng)建一個(gè)畫筆
final Paint paint=new Paint();
//創(chuàng)建一個(gè)矩陣
Matrix matrix=new Matrix();
//旋轉(zhuǎn)
//matrix.setRotate(180,480,800);
//平移
//matrix.setTranslate(200,0);
//翻轉(zhuǎn) set只作用一次 post 使用多次
//matrix.setScale(-1f,1f);
//matrix.postTranslate(orgBitmap.getWidth(),0);
//畫一幅圖
canvas.drawBitmap(orgBitmap,matrix,paint);
//顯示圖片
forgound.setImageBitmap(copyBitmap);
添加觸摸事件
//給前景圖片添加touch事件
//當(dāng)有觸摸事件發(fā)生 系統(tǒng)就會(huì)將這個(gè)事件接收并回調(diào)這個(gè)事件
forgound.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
//獲取當(dāng)前事件
int action= motionEvent.getAction();
//判斷狀態(tài)
if(action==MotionEvent.ACTION_MOVE){
//獲取觸摸點(diǎn)的坐標(biāo)
int x=(int)motionEvent.getX();
int y=(int)motionEvent.getY();
//替換x,y對(duì)應(yīng)的像素
for (int i=-6; i< 6; i++) {
for (int j=-6; j< 6; j++) {
copyBitmap.setPixel(x+i,y+j,Color.TRANSPARENT);
}
}
forgound.setImageBitmap(copyBitmap);
}
return true;
}
});
}
效果: