android錨點
1. Android如何在CollapsingToolbarLayout 中實現點擊事件
上一篇博客我們學習了Android Design SuppZ喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcnQgTGlicmFyeb/i1tC1xCDKx7j2vPK1pbXE1+m8//NPGJyIC8+DQpBbmRyb2lkIE3Qwr//NztLDx7zM0PjRp8+wRGVzaWv+LW0LXExuTL+8vEuPbX6bz+xOO1xLmks8zW0NL9yOs8L3A+DQo8cHJlIGNsYXNzPQ=="brush:java;">compile 'com.android.support:design:22.2.0'
AppBarLayout
效果圖是這樣的
AppBarLayout 是繼承LinerLayout實現的一個ViewGroup容器組件,它是為了Material Design設計的App Bar,支持手勢滑動操作。
默認的AppBarLayout是垂直方向的,它的作用是把AppBarLayout包裹的內容都作為AppBar。類似上面圖片貼出來的效果,代碼布局如下:
?
1
2
3
4
5
6
7
<code avrasm="" class="hljs">
</android.support.v7.widget.toolbar>
</android.support.design.widget.tablayout></android.support.design.widget.appbarlayout></code>
此處將Toolbar 和Tablayout的組合部分共同構成 AppBar的效果。
注意: AppBarLayout必須作為Toolbar的父布局容器
AppBarLayout是支持手勢滑動效果的,不過的跟CoordinatorLayout配合使用,接下來學習一下CoordinatorLayout組件怎麼使用?
CoordinatorLayout
從開發文檔中可以了解到,CoordinatorLayout是一個增強型的FrameLayout。它的作用有兩個
作為一個布局的根布局 最為一個為子視圖之間相互協調手勢效果的一個協調布局
例如一下布局代碼:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<code avrasm="" class="hljs"> <!--?xml version=1.0 encoding=utf-8?-->
</android.support.design.widget.tablayout></android.support.v7.widget.toolbar></android.support.design.widget.appbarlayout>
<!--可滑動的布局內容-->
</android.support.design.widget.floatingactionbutton></android.support.v7.widget.recyclerview></android.support.design.widget.coordinatorlayout></code>
從上面布局看到,CoordinatorLayout協調布局中包裹了兩個布局,一個是NestedScrollView,一個是AppBarLayout,以及FAB按鈕。
我們來看看CoordinatorLayout是怎麼來協調這兩個子視圖手勢操作的。
1.由於CoordinatorLayout是FrameLayout布局,我們可以通過
?
1
<code avrasm="" class="hljs">android:layout_gravity=bottom|end</code>
屬性來控制組件在整個布局中的位置,比如上面效果中的FAB就是通過android:layout_gravity=」bottom|end」來確定 FAB的位置在底端的最右邊的位置。
2.為了達到上面效果圖的手勢動畫效果,我們必須做如下設置,通過app:layout_scrollFlags=」scroll|enterAlways」 屬性來確定哪個組件是可滑動的
設置的layout_scrollFlags有如下幾種選項:
scroll: 所有想滾動出屏幕的view都需要設置這個flag- 沒有設置這個flag的view將被固定在屏幕頂部。 enterAlways: 這個flag讓任意向下的滾動都會導致該view變為可見,啟用快速「返回模式」。 enterAlwaysCollapsed: 當你的視圖已經設置minHeight屬性又使用此標志時,你的視圖只能已最小高度進入,只有當滾動視圖到達頂部時才擴大到完整高度。 exitUntilCollapsed: 滾動退出屏幕,最後折疊在頂端。
我們上面的布局中 給Toolbar設置了app:layout_scrollFlags屬性,因此,Toolbar是可以滾動出屏幕,且向下滾動有可以出現。
3.為了使得Toolbar可以滑動,我們必須還得有個條件,就是CoordinatorLayout布局下包裹一個可以滑動的布局,比如 RecyclerView,NestedScrollView(經過測試,ListView,ScrollView不支持)具有滑動效果的組件。並且給這些組件設置如下屬性來告訴CoordinatorLayout,該組件是帶有滑動行為的組件,然後CoordinatorLayout在接受到滑動時會通知AppBarLayout 中可滑動的Toolbar可以滑出屏幕了。
?
1
<code class="hljs" perl="">app:layout_behavior=@string/appbar_scrolling_view_behavior</code>
總結: 為了使得Toolbar有滑動效果,必須做到如下三點:
CoordinatorLayout必須作為整個布局的父布局容器。 給需要滑動的組件設置 app:layout_scrollFlags=」scroll|enterAlways」 屬性。 給你的可滑動的組件,也就是RecyclerView 或者 NestedScrollView 設置如下屬性:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<code class="hljs" markdown=""> app:layout_behavior=@string/appbar_scrolling_view_behavior
```
##CollapsingToolbarLayout

CollapsingToolbarLayout包裹 Toolbar 的時候提供一個可折疊的 Toolbar,一般作為AppbarLayout的子視圖使用。
CollapsingToolbarLayout 提供以下屬性和方法是用:
1. Collapsing title:ToolBar的標題,當CollapsingToolbarLayout全屏沒有折疊時,title顯示的是大字體,在折疊的過程中,title不斷變小到一定大小的效果。你可以調用setTitle(CharSequence)方法設置title。
2. Content scrim:ToolBar被折疊到頂部固定時候的背景,你可以調用setContentScrim(Drawable)方法改變背景或者 在屬性中使用 app:contentScrim=?attr/colorPrimary來改變背景。
3. Status bar scrim:狀態欄的背景,調用方法setStatusBarScrim(Drawable)。還沒研究明白,不過這個只能在Android5.0以上系統有效果。
4. Parallax scrolling children:CollapsingToolbarLayout滑動時,子視圖的視覺差,可以通過屬性app:layout_collapseParallaxMultiplier=0.6改變。
5. CollapseMode :子視圖的折疊模式,有兩種「pin」:固定模式,在折疊的時候最後固定在頂端;「parallax」:視差模式,在折疊的時候會有個視差折疊的效果。我們可以在布局中使用屬性app:layout_collapseMode=parallax來改變。
布局代碼如下:
</code>
?
1
2
3
4
5
<code class="hljs" markdown="">
***總結:*** CollapsingToolbarLayout主要是提供一個可折疊的Toolbar容器,對容器中的不同視圖設置layout_collapseMode折疊模式,來達到不同的折疊效果。
1.Toolbar 的高度layout_height必須固定,不能 「wrap_content」,否則Toolbar不會滑動,也沒有折疊效果。
2.為了能讓FloatingActionButton也能折疊且消失出現,我們必須給FAB設置錨點屬性</code>
?
1
<code class="hljs" perl="">app:layout_anchor=@id/appbar</code>
意思是FAB浮動按鈕顯示在哪個布局區域。
且設置當前錨點的位置
app:layout_anchorGravity=」bottom|end|right」
意思FAB浮動按鈕在這個布局區域的具體位置。
兩個屬性共同作用才是的FAB 浮動按鈕也能折疊消失,出現。
3.給需要有折疊效果的組件設置 layout_collapseMode屬性。
【轉載請註明出處:http://blog.csdn.net/feiclear_up/article/details/46514791 CSDN 廢墟的樹】
NavigationView
http://www.2cto.com/kf/201506/409067.html
2. 我想在Android的一個網格視圖中顯示圖片,並對這些圖片添加一個圓角矩形邊框,我該怎麼做
移動工具 【V】 直接選取工具、組選取工具 【A】 鋼筆、添加錨點、刪除錨點、改變路徑角度 【P】 添加錨點工具 【+】 刪除錨點工具 【-】 文字、區域文字、路徑文字、豎向文字、豎向區域文字、豎向路徑文字 【T】 橢圓、多邊形、星形、螺旋形 【L】 增加邊數、倒角半徑及螺旋圈數(在【L】、【M】狀態下繪圖) 【↑】 減少邊數、倒角半徑及螺旋圈數(在【L】、【M】狀態下繪圖) 【↓】 矩形、圓角矩形工具 【M】 畫筆工具 【B】 鉛筆、圓滑、抹除工具 【N】 旋轉、轉動工具 【R】 縮放、拉伸工具 【S】 鏡向、傾斜工具 【O】 自由變形工具 【E】 混合、自動勾邊工具 【W】 圖表工具(七種圖表) 【J】 漸變網點工具 【U】 漸變填色工具 【G】 顏色取樣器 【I】 油漆桶工具 【K】 剪刀、餐刀工具 【C】 視圖平移、頁面、尺寸工具 【H】 放大鏡工具 【Z】 默認前景色和背景色 【D】 切換填充和描邊 【X】 標准屏幕模式、帶有菜單欄的全屏模式、全屏模式 【F】 切換為顏色填充 【】 切換為無填充 【/】 臨時使用抓手工具 【空格】 精確進行鏡向、旋轉等操作 選擇相應的工具後按【回車】 復制物體 在【R】、【O】、【V】等狀態下按【Alt】+【拖動】 文件操作 新建圖形文件 【Ctrl】+【N】 打開已有的圖像 【Ctrl】+【O】 關閉當前圖像 【Ctrl】+【W】 保存當前圖像 【Ctrl】+【S】 另存為... 【Ctrl】+【Shift】+【S】 存儲副本 【Ctrl】+【Alt】+【S】 頁面設置 【Ctrl】+【Shift】+【P】 文檔設置 【Ctrl】+【Alt】+【P】 列印 【Ctrl】+【P】 打開“預置”對話框 【Ctrl】+【K】 回復到上次存檔之前的狀態 【F12】 編輯操作 還原前面的操作(步數可在預置中) 【Ctrl】+【Z】 重復操作 【Ctrl】+【Shift】+【Z】 將選取的內容剪切放到剪貼板 【Ctrl】+【X】或【F2】 將選取的內容拷貝放到剪貼板 【Ctrl】+【C】 將剪貼板的內容粘到當前圖形中 【Ctrl】+【V】或【F4】 將剪貼板的內容粘到最前面 【Ctrl】+【F】 將剪貼板的內容粘到最後面 【Ctrl】+【B】 刪除所選對象 【DEL】 選取全部對象 【Ctrl】+【A】 取消選擇 【Ctrl】+【Shift】+【A】 再次轉換 【Ctrl】+【D】 發送到最前面 【Ctrl】+【Shift】+【]】 向前發送 【Ctrl】+【]】 發送到最後面 【Ctrl】+【Shift】+【[】 向後發送 【Ctrl】+【[】 群組所選物體 【Ctrl】+【G】 取消所選物體的群組 【Ctrl】+【Shift】+【G】 鎖定所選的物體 【Ctrl】+【2】 鎖定沒有選擇的物體 【Ctrl】+【Alt】+【Shift】+【2】 全部解除鎖定 【Ctrl】+【Alt】+【2】 隱藏所選物體 【Ctrl】+【3】 隱藏沒有選擇的物體 【Ctrl】+【Alt】+【Shift】+【3】 顯示所有已隱藏的物體 【Ctrl】+【Alt】+【3】 聯接斷開的路徑 【Ctrl】+【J】 對齊路徑點 【Ctrl】+【Alt】+【J】 調合兩個物體 【Ctrl】+【Alt】+【B】 取消調合 【Ctrl】+【Alt】+【Shift】+【B】 調合選項 選【W】後按【回車】 新建一個圖像遮罩 【Ctrl】+【7】 取消圖像遮罩 【Ctrl】+【Alt】+【7】 聯合路徑 【Ctrl】+【8】 取消聯合 【Ctrl】+【Alt】+【8】 圖表類型 選【J】後按【回車】 再次應用最後一次使用的濾鏡 【Ctrl】+【E】 應用最後使用的濾鏡並調節參數 【Ctrl】+【Alt】+【E】 文字處理 文字左對齊或頂對齊 【Ctrl】+【Shift】+【L】 文字中對齊 【Ctrl】+【Shift】+【C】 文字右對齊或底對齊 【Ctrl】+【Shift】+【R】 文字分散對齊 【Ctrl】+【Shift】+【J】 插入一個軟回車 【Shift】+【回車】 精確輸入字距調整值 【Ctrl】+【Alt】+【K】 將字距設置為0 【Ctrl】+【Shift】+【Q】 將字體寬高比還原為1比1 【Ctrl】+【Shift】+【X】 左/右選擇 1 個字元 【Shift】+【←】/【→】 下/上選擇 1 行 【Shift】+【↑】/【↓】 選擇所有字元 【Ctrl】+【A】 選擇從插入點到滑鼠點按點的字元 【Shift】加點按 左/右移動 1 個字元 【←】/【→】 下/上移動 1 行 【↑】/【↓】 左/右移動1個字 【Ctrl】+【←】/【→】 將所選文本的文字大小減小2 點象素 【Ctrl】+【Shift】+【】 將所選文本的文字大小減小10 點象素 【Ctrl】+【Alt】+【Shift】+【】 將行距減小2點象素 【Alt】+【↓】 將行距增大2點象素 【Alt】+【↑】 將基線位移減小2點象素 【Shift】+【Alt】+【↓】 將基線位移增加2點象素 【Shift】+【Alt】+【↑】 將字距微調或字距調整減小20/1000ems 【Alt】+【←】 將字距微調或字距調整增加20/1000ems 【Alt】+【→】 將字距微調或字距調整減小100/1000ems 【Ctrl】+【Alt】+【←】 將字距微調或字距調整增加100/1000ems 【Ctrl】+【Alt】+【→】 游標移到最前面 【HOME】 游標移到最後面 【END】 選擇到最前面 【Shift】+【HOME】 選擇到最後面 【Shift】+【END】 將文字轉換成路徑 【Ctrl】+【Shift】+【O】 視圖操作 將圖像顯示為邊框模式(切換) 【Ctrl】+【Y】 對所選對象生成預覽(在邊框模式中) 【Ctrl】+【Shift】+【Y】 放大視圖 【Ctrl】+【+】 縮小視圖 【Ctrl】+【-】 放大到頁面大小 【Ctrl】+【0】 實際象素顯示 【Ctrl】+【1】 顯示/隱藏所路徑的控制點 【Ctrl】+【H】 隱藏模板 【Ctrl】+【Shift】+【W】 顯示/隱藏標尺 【Ctrl】+【R】 顯示/隱藏參考線 【Ctrl】+【;】 鎖定/解鎖參考線 【Ctrl】+【Alt】+【;】 將所選對象變成參考線 【Ctrl】+【5】 將變成參考線的物體還原 【Ctrl】+【Alt】+【5】 貼緊參考線 【Ctrl】+【Shift】+【;】 顯示/隱藏網格 【Ctrl】+【”】 貼緊網格 【Ctrl】+【Shift】+【”】 捕捉到點 【Ctrl】+【Alt】+【”】 應用敏捷參照 【Ctrl】+【U】 顯示/隱藏“字體”面板 【Ctrl】+【T】 顯示/隱藏“段落”面板 【Ctrl】+【M】 顯示/隱藏“製表”面板 【Ctrl】+【Shift】+【T】 顯示/隱藏“畫筆”面板 【F5】 顯示/隱藏“顏色”面板 【F6】/【Ctrl】+【I】 顯示/隱藏“圖層”面板 【F7】 顯示/隱藏“信息”面板 【F8】 顯示/隱藏“漸變”面板 【F9】 顯示/隱藏“描邊”面板 【F10】 顯示/隱藏“屬性”面板 【F11】 顯示/隱藏所有命令面板 【TAB】 顯示或隱藏工具箱以外的所有調板 【Shift】+【TAB】 選擇最後一次使用過的面板 【Ctrl】+【~】
3. Android PopupWindow怎麼合理控制彈出位置
Android PopupWindow怎麼合理控制彈出位置
php">privatevoidshowPopupWindow(Viewparent){
if(popupWindow==null){
LayoutInflaterlayoutInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view=layoutInflater.inflate(R.layout.group_list,null);
lv_group=(ListView)view.findViewById(R.id.lvGroup);
Collections.reverse(groups);
GroupAdaptergroupAdapter=newGroupAdapter(this,groups);
lv_group.setAdapter(groupAdapter);
popupWindow=newPopupWindow(view,200,220);
}
popupWindow.setFocusable(true);
popupWindow.setOutsideTouchable(true);//設置點擊屏幕其它地方彈出框消失
popupWindow.setBackgroundDrawable(newBitmapDrawable());
WindowManagerwindowManager=(WindowManager)getSystemService(Context.WINDOW_SERVICE);
intxPos=-popupWindow.getWidth()/2
+getCustomTitle().getCenter().getWidth()/2;
popupWindow.showAsDropDown(parent,xPos,4);
lv_group.setOnItemClickListener(newOnItemClickListener(){
@Override
publicvoidonItemClick(AdapterView<?>adapterView,Viewview,
intposition,longid){
loadNew(((StringItem)(groups.get(position))).getId());
if(popupWindow!=null)
popupWindow.dismiss();
}
});
}
只需要設置proupwindows的setOutsideTouchable屬性即可。
以下為示例代碼:
window.showAtLocation(parent, Gravity.RIGHT | Gravity.BOTTOM, 10,10);//顯示位置
第一個參數指定PopupWindow的錨點view,即依附在哪個view上。
第二個參數指定起始點
第三個參數設置以起始點的右下角為原點,向左、上各偏移的像素。
自己看下API
4. Android Dialog如何顯示在空間的下面
Android中Alertdialog是沒有直接顯示在指定控制項下的API的,你可以使用PopupWindow來實現顯示在指定控制項下面的需求。PopupWindow不僅能顯示在指定位置,還可以指定顯示和消失的動畫,不必限定死必須用哪個控制項,只需要實現需求即可。
PopupWindow 是一個可以顯示在當前 Activity 之上的浮動容器,PopupWindow 彈出的位置是能夠改變的,按照有無偏移量,可以分為無偏移和有偏移兩種;按照參照對象的不同又可以分為兩種:相對某個控制項(Anchor 錨點)的位置和在父容器內部的相對位置。
LayoutInflatermLayoutInflater=(LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE);
ViewcontentView=mLayoutInflater.inflate(R.layout.pop,null)
//R.layout.pop為PopupWindow的布局文件
PopupWindowpop=newPopupWindow(contentView,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
pop.setBackgroundDrawable(newBitmapDrawable());
//指定PopupWindow的背景
pop.setFocusable(true);
//指定PopupWindow顯示在你指定的view下
pop.showAsDropDown(your_view);
5. Android開發,如何讓PopupWindow彈出時外部控制項不可點擊
// 用於PopupWindow的View 2 View contentView=LayoutInflater.from(context).inflate(layoutRes, null, false); 3 // 創建PopupWindow對象,其中: 4 // 第一個參數是用於PopupWindow中的View,第二個參數是PopupWindow的寬度, 5 // 第三個參數是PopupWindow的高度,第四個參數指定PopupWindow能否獲得焦點 6 PopupWindow window=new PopupWindow(contentView, 100, 100, true); 7 // 設置PopupWindow的背景 8 window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 9 // 設置PopupWindow是否能響應外部點擊事件10 window.setOutsideTouchable(true);11 // 設置PopupWindow是否能響應點擊事件12 window.setTouchable(true);13 // 顯示PopupWindow,其中:14 // 第一個參數是PopupWindow的錨點,第二和第三個參數分別是PopupWindow相對錨點的x、y偏移15 window.showAsDropDown(anchor, xoff, yoff);16 // 或者也可以調用此方法顯示PopupWindow,其中:17 // 第一個參數是PopupWindow的父View,第二個參數是PopupWindow相對父View的位置,18 // 第三和第四個參數分別是PopupWindow相對父View的x、y偏移19 // window.showAtLocation(parent, gravity, x, y);
每個方法的作用都寫在註解里了,相信大家都能看懂。不過這里要注意這兩行:
1 window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));2 window.setOutsideTouchable(true);
只有同時設置PopupWindow的背景和可以響應外部點擊事件,它才能「真正」響應外部點擊事件。也就是說,當你點擊PopupWindow的外部或者按下「Back」鍵時,PopupWindow才會消失。
6. 在對Android的View對象使用setRotation方法時,View默認的錨點是其中心位置,請問怎樣改變View的錨點位置
在Animator中需要通過View.setPivotX和View.setPivotY方法手動給View設置中心點。
imageView.setPivotX(10);
imageView.setPivotY(10);
//是指以ImageView為坐標系(10,10)位置
7. Android游戲開發之Cocos2d-x
游戲的製作如播放電影,擁有四大核心,包括: 導演、場景、圖層、演員 。通過它們之間的不同配合,實現豐富多彩的效果。
public class CocosActivity extends AppCompatActivity {
private CCDirector mCcDirector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CCGLSurfaceView ccglSurfaceView =new CCGLSurfaceView(this);
setContentView(ccglSurfaceView);
導演,全局只有一個,單例模式創建
mCcDirector = CCDirector.sharedDirector();
開啟繪制(開始拍電影)
mCcDirector.attachInView(ccglSurfaceView);
幀率,每秒刷新的次數,與手機性能有關
//ccDirector.setDisplayFPS(true);
設置幀率為60(記得把幀率文件放進項目中)
//ccDirector.setAnimationInterval(1/60f);
設置橫屏
//ccDirector.setDeviceOrientation(CCDirector.);
屏幕適配,會基於不同屏幕大小進行適配
mCcDirector.setScreenSize(1920,1080);
場景
CCScene ccScene = CCScene.node();
圖層
CCLayer ccLayer =CCLayer.node();
給場景添加圖層
ccScene.addChild(ccLayer);
導演運行場景
mCcDirector.runWithScene(ccScene);
}
@Override
protected void onResume() {
super.onResume();
mCcDirector.onResume();
}
@Override
protected void onPause() {
super.onPause();
mCcDirector.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mCcDirector.end();
}
1、平移
參數1是移動時間,參數2是目標位置坐標,ccp方法是把坐標轉換為cocos2d的坐標
CCMoveTo ccMoveTo = CCMoveTo.action(3,ccp(200,0));
與上不同的是,第2個參數代表水平移動200,豎直不移動,即偏移量
CCMoveBy ccMoveBy =CCMoveBy.action(3,ccp(200,0));
2、旋轉
參數1時間,參數2角度,旋轉中心是左下角的點,順時針轉
CCRotateBy ccRotateBy =CCRotateBy.action(3,360);
與上不同的是,逆時針轉(捷徑,順時針轉270==逆時針轉90)
CCRotateTo ccRotateTo =CCRotateTo.action(3,270);
3、縮放
參數1時間,參數2X方向縮放,參數3Y方向縮放
CCScaleBy ccScaleBy =CCScaleBy.action(3,2,2);
參數1時間,參數2縮放
CCScaleTo ccScaleTo =CCScaleTo.action(3,2);
4、跳躍(參數1時間,參數2目標點,參數3跳躍高度,參數4跳躍次數)
CCJumpBy ccJumpBy =CCJumpBy.action(3,ccp(0,0),100,3);
5、淡入淡出(參數是時間)
CCFadeIn ccFadeIn =CCFadeIn.action(2);
CCFadeOut ccFadeOut =CCFadeOut.action(2);
6、貝塞爾曲線
點的含義,從point1出發,經過point2,到達endPosition
CCBezierConfig ccBezierConfig =new CCBezierConfig();
ccBezierConfig. controlPoint_1 =ccp(100,50);
ccBezierConfig. controlPoint_2 =ccp(200,200);
ccBezierConfig. endPosition =ccp(300,100);
CCBezierBy ccBezierBy =CCBezierBy.action(2,ccBezierConfig);
7、加速度
CCMoveBy ccMoveBy =CCMoveBy.action(2,ccp(100,100));
漸快漸慢,參數2是加速度
CCEaseIn ccEaseIn =CCEaseIn.action( ccMoveBy ,5);
CCEaseOut ccEaseOut =CCEaseOut.action( ccMoveBy ,5);
8、閃爍(時間,閃爍次數)
CCBlink ccBlink =CCBlink.action(2,10);
9、文字(參1是顯示的文字,參2是字體格式(可不填,如""),參數3是字體大小)
CCLabel ccLabel = CCLabel.labelWithString("顯示文字","STCAIYUN.TTF",20);
設置文字顏色
ccColor3B ccColor3B =ccc3(100,50,0);
ccLabel.setColor(ccColor3B );
設置文字位置
ccLabel.setPosition(ccp(width,height));
重置文字
ccLabel.setString("顯示文字");
顏色漸變(從本來的文字顏色漸變到設置的字體顏色)
CCTintBy tintBy =CCTintBy.action(3,ccc3(50,-50,100));
10、循環(參數是動畫效果)
CCRepeatForever ccRepeatForever =CCRepeatForever.action(action);
11、延遲(參數是時間)
CCDelayTime ccDelayTime =CCDelayTime.action(1);
12、反轉(將一個動畫倒序執行)
ccJumpBy.reverse();
13、同時(參數是不定長度數組)
CCSpawn ccSpawn =CCSpawn.actions(action1,action2);
14、連續動畫(參數是不定長度數組)
CCSequence ccSequence =CCSequence.actions(action1,action2, ccCallFunc ");
15、反射(執行一個動畫方法)
CCCallFunc .action(this," anim ");
被反射的執行方法
public void anim (){}
16、逐幀動畫
public void walk(){
存放幀動畫的集合
ArrayList ccSpriteFrames =new ArrayList<>();
String format="z_1_%d.png"; // %d和%02d代表整數,用i來取代,%d只取代i,%02d會補0
for(int i=1;i<10;i++){
CCSprite ccSprite =CCSprite.sprite(String.format(format,i));
CCSpriteFrame ccSpriteFrame =ccSprite.displayedFrame();
ccSpriteFrames.add(ccSpriteFrame );
}
參數1是動畫名稱,參數2是每一幀停留的時間,參數3是幀動畫集合
CCAnimation ccAnimation =CCAnimation.animation("walk",.2f,ccSpriteFrames);
參數2是否持續執行動畫,如果想執行無限循環,可以使用CCRepeatForever
CCAnimate ccAnimate =CCAnimate.action(ccAnimation,false);
mCcSprite.runAction(ccAnimate);
}
17、隱藏
CCHide ccHide =CCHide.action();
18、顯示
CCShow ccShow =CCShow.action();
19、跟隨(參數是跟隨的對象)
CCFollow ccFollow =CCFollow.action(mCCSprite);
20、執行動畫(上述皆是)
mCcSprite.runAction(action);
21、工具類使用
CGPointUtil .distance(point1,point2); //計算兩點距離
獲取聲音引擎
SoundEngine engine =SoundEngine.sharedEngine();
參數1是activity,SurfaceView創建時存入,參2是播放資源id(res\raw),參數3是否循環播放
engine.playSound(CCDirector.theApp,1,true);
手動停止音樂播放
engine.realesAllSounds();
生命周期跟隨Activity
SoundEngine.sharedEngine().resumeSound();
SoundEngine.sharedEngine().pauseSound();
SoundEngine.sharedEngine().realesAllSounds();
預載入播放音樂,避免播放音樂時沒聲音
SoundEngine.sharedEngine().preloadEffect();
SoundEngine.sharedEngine().preloadSound();
1、創建
CCSprite mCcSprite =new CCSprite(" pic.jpeg ");
2、錨點(圖片上的一點,類似圖釘,對應圖片顯示的位置)
CGPoint cgPoint =ccp(0,0);
mCcSprite.setAnchorPoint(cgPoint);
3、位置
mCcSprite.setPosition(cgPoint);
4、屬性(縮放、翻轉、透明度)
ccSprite.setFlipX(true); 水平翻轉
ccSprite.setOpacity(255); 透明度
ccSprite.setScale(2); 縮放
5、移除(在Layer裡面操作)
mCcSprite.removeSelf(); //精靈從圖層中移除
( Layer )this.removeSelf(); // 移除整個圖層
6、尺寸
CGSize cgSize =CCDirector.sharedDirector().winSize();
1、游戲暫停(圖層靜止,將不再響應任何事件)
MapLayer.this.onExit();
注意:因為圖層不再響應任何事件,所以暫停按鈕應該加在暫停圖層的父圖層上
this.getParent().addChild(new PauseLayer());
2、游戲繼續(圖層恢復動態,接收點擊事件)
MapLayer.this.onEnter();
通用的游戲繼續方法
CCDirector.sharedDirector().getRunningScene().onEnter();
3、定時器
CCScheler ccScheler =CCScheler.sharedScheler();
通過反射執行方法
ccScheler.schele(" onScheler ",this,2,false);
方法聲明為公開類型
public void onScheler (float f){ //實現具體邏輯
};
4、進度條
CCProgressTimer ccProgressTimer =CCProgressTimer.progressWithFile(" image/pic.jpeg "); //多層目錄
ccProgressTimer.setPosition(width,height);
this.getParent().addChild(ccProgressTimer); //具體加到什麼圖層,看情況
ccProgressTimer.setScale(0.6f);
ccProgressTimer.setPercentage(2);
設置顯示樣式(垂直,水平)->(最後2個字母,left,right,代表進度條從左往右)
ccProgressTimer.setType(CCProgressTimer. LR );
進度條外框 等元素,都作為精靈與進度條同級加入圖層
this.getParent().addChild(sprite);
Android坐標系的(0,0)在左上角,而Cocos2d-x坐標系的(0,0)在左下角。所以在處理Android的點擊事件MotionEvent時,需要進行坐標體系的轉換。
CGPoint cgPoint = convertPrevTouchToNodeSpace (event);
監聽圖片的點擊范圍,自定義封裝點擊事件
CGRect .containsPoint( mCcSprite.getBoundingBox() , cgPoint );
CCMenu ccMenu =CCMenu.menu();
CCSprite normalSprite =CCSprite.sprite("pic_1.jpeg"); //正常情況下顯示的圖片
CCSprite selectSprite =CCSprite.sprite("pic_2.jpeg"); //按下時顯示的圖片
注意:反射的方法需要使用pulbic修飾,參數指target,直接傳this,它不是上下文Context
CCMenuItemSprite itemSprite =CCMenuItemSprite.item( normalSprite , selectSprite , this ," onCLick ");
ccMenu.addChild( itemSprite );
this.addChild(ccMenu); //菜單添加到圖層
public void onCLick (Object obj){} //點擊事件響應方法,必須用public修飾以及帶參數
setIsTouchEnabled(true); //打開圖層點擊事件,默認關閉
模仿任何天氣現象,只需要改這一句,剩下的不變
CCParticleSystem ccParticleSystem= CCParticleSnow.node();
設置雪花大小
ccParticleSystem.setScale(2);
設置飄落的速度
ccParticleSystem.setSpeed(10);
設置雪花的圖片
ccParticleSystem.setTexture(CCTextureCache.sharedTextureCache().addImage("snow.png"));
this.addChild(ccParticleSystem,1);
停止粒子系統(下雪)
ccParticleSystem.stopSystem();
1、載入地圖
ArrayList mCGPoints = new ArrayList<>();
CCTMXTiledMap mCctmxTiledMap = CCTMXTiledMap.tiledMap(" map.tmx ");
mCctmxTiledMap.setAnchorPoint(ccp(0.5f,0.f));
mCctmxTiledMap.setPosition(width,height);
CCTMXObjectGroup cctmxObjectGroup= mCctmxTiledMap.objectGroupNamed("road");
ArrayList<HashMap<String,String>> objects = cctmxObjectGroup.objects;
for(HashMap<String,String> hashMap:objects){ //載入地圖的坐標(需要經過的坐標點)
Integer x =Integer.parseInt(hashMap.get("x"));
Integer y =Integer.parseInt(hashMap.get("y"));
CGPoint cgPoint =ccp(x,y);
mCGPoints .add(cgPoint); }
this.addChild(mCctmxTiledMap);
在地圖上添加精靈
mCCSprite.setPosition(mCGPoints.get(0));
mCctmxTiledMap.addChild(mCCSprite);
地圖跟隨精靈的移動而移動
CCFollow ccFollow =CCFollow.action(mCCSprite);
mCctmxTiledMap .runAction(ccFollow);
2、地圖隨手指觸摸事件移動(重寫觸摸方法)
@Override
public boolean ccTouchesMoved(MotionEvent event) {
手指拖拽時,地圖隨手指移動
mCctmxTiledMap.touchMove(event,mCctmxTiledMap);
地圖移動,地圖上所有精靈都隨之移動(地圖是父親,精靈是孩子)
mCctmxTiledMap.addChild(mCCSprite);
return super.ccTouchesMoved(event);
}
創建場景
CCScene ccScene =CCScene.node();
場景添加圖層
ccScene.addChild(ccLayer);
場景切換特效
CCJumpZoomTransition ccJumpZoomTransition =CCJumpZoomTransition.transition(2,ccScene);
導演切換場景
CCDirector.sharedDirector(). replaceScene (ccJumpZoomTransition);
CopyOnWrite容器即寫時復制的容器。通俗的理解是當我們往一個容器添加元素的時候,不直接往當前容器添加,而是先將當前容器進行Copy,復制出一個新的容器,然後新的容器里添加元素,添加完元素之後,再將原容器的引用指向新的容器。這樣做的好處是我們可以對CopyOnWrite容器進行並發的讀,而不需要加鎖,因為當前容器不會添加任何元素。所以CopyOnWrite容器也是一種讀寫分離的思想,讀和寫不同的容器。用法和ArrayList相近。
CopyOnWriteArrayList OnWriteArrayList = new CopyOnWriteArrayList();
setIsTouchEnabled(true); //打開點擊事件
@Override
public boolean ccTouchesBegan (MotionEvent event) {
return super.ccTouchesBegan(event);
}
@Override
public boolean ccTouchesCancelled (MotionEvent event) {
return super.ccTouchesCancelled(event);
}
@Override
public boolean ccTouchesMoved (MotionEvent event) {
return super.ccTouchesMoved(event);
}
@Override
public boolean ccTouchesEnded (MotionEvent event) {
return super.ccTouchesEnded(event);
}
描述:UI頻繁刷新,造成主線程的堵塞或掛起
private CCGLSurfaceView mCCGLSurfaceView;
mCCGLSurfaceView = (CCGLSurfaceView) CCDirector.sharedDirector().getOpenGLView();
mCCGLSurfaceView.queueEvent(new Runnable() {
@Override
public void run() { //切換到主線程
}
});
描述:CCSprite運行動畫時,沒有表現出任何視覺效果。
原因:一個動畫只能被一個CCSprite執行一次,執行完成後,原來的動畫會失效。
解決:每次執行的動畫,都需要重新生成,即使是相同的動畫效果。
緩存:CCDirector.sharedDirector().purgeCachedData();