上次我们讲了将图片导入,以及将图片分成了9份,并对应其图片索引,今天讲一下图片的乱序设置,以及相关界面设置
我们先来看一下界面图
上面这个图就是我们今天的目标
每个图中间和四周的间隙需要我们设置
整个游戏的画面宽度也需要我们设置
此外,乱的图片也是需要我们设置的
(原图为下)
我们先看几个变量:
1. 关于margin和padding的区别,推荐大家看一下:
http://www.cnblogs.com/kissazi2/p/3309109.html
这里面讲的还是很清楚的。
上面是初始化内容
其中,
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,3,
getResources().getDisplayMetrics());
这个方法是转化为标准尺寸的一个函数。这里COMPLEX_UNIT_DIP是单位,3是数值,指的就是3sp。我们这样初始化是因为要适应不同的手机,如果不设置的话,可能效果不一样。
第二个初始化内容是找到上下左右padding的最小值,作为我们的padding。
2. t 布局中有很多特殊的属性,通常在载入布局之前,在相关的xml文件中进行静态设置即可。 但是,在有些情况下,我们需要动态设置布局的属性,在不同的条件下设置不同的布局排列方式,这时候就需要用到RelativeLayout.LayoutParams.addRule() 方法,该方法有两种重载方式: addRule(int verb) :用此方法时,所设置节点的属性不能与其它兄弟节点相关联或者属性值为布尔值(布尔值的属性,设置时表示该属性为 true,不设置就默认为 false),比如:addRule(RelativeLayout.CENTER_VERTICAL) 就表示在 RelativeLayout 中的相应节点是垂直居中的。 addRule(int verb, int anchor) :该方法所设置节点的属性必须关联其它的兄弟节点或者属性为布尔值( 属性为布尔值时,anchor 为 RelativeLayout.TRUE 表示 true,anchor 为0表示 false),比如:addRule(RelativeLayout.ALIGN_LEFT, R.id.date) 就表示 RelativeLayout 中的相应节点放置在一个 id 值为 date 的兄弟节点的左边。
3. 在编程的时候很多时候需要动态显示一些内容,在动态添加View的时候,主要使用addView方法。
查阅到了相关知识,选择一个讲解的不错的给大家
addView方法简介
例子如下:
Activity代码:
public class helloWorld extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView( R.layout.main ); // 取得LinearLayout 物件 LinearLayout ll = (LinearLayout)findViewById(R.id.viewObj); // 将TextView 加入到LinearLayout 中 TextView tv = new TextView(this); tv.setText(Hello World); ll. addView ( tv ); // 将Button 1 加入到LinearLayout 中 Button b1 = new Button(this); b1.setText(取消); ll. addView ( b1 ); // 将Button 2 加入到LinearLayout 中 Button b2 = new Button(this); b2.setText(确定); ll. addView ( b2 ); // 从LinearLayout 中移除Button 1 ll. removeView ( b1 ); } }
4.
这个是加载图片。
BitmapFactory.decodeResource(?,?)这个带两个参数的方法:第一个参数是包含你要加载的位图资源文件的对象(一般写成 getResources()就ok了);第二个时你需要加载的位图资源的Id。
BitmapFactory.decodeResource(?,?,?)带三个参数的方法:前两个和上面的方法一样。第三个参数应该是对你要加载的位图是否需要完整显示,如果你只需要部分,可以在这里定制。
5.
Comparator是个接口,可重写compare()及equals()这两个方法,用于比较功能;如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的。
compare(a,b)方法:根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true。
Collections.sort(list, new PriceComparator());的第二个参数返回一个int型的值,就相当于一个标志,告诉sort方法按什么顺序来对list进行排序。
我们上面采用的是随机数,所以排的序是乱序。
到这里就完成了上面的目标
END