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();