一、基础学习
1.图形学真的很神奇啊。。。。查了些资料做出了3D云标签,哈哈。。。其实直接拿来用的,我们要效仿鲁迅先生的拿来主义,嘿嘿~~3D标签云就是做一个球面,然后再球面上取均匀分布的点,把点坐标赋给标签,再根据抽象出来的Z轴大小来改变标签的字体大小,透明度,做出立体感觉,然后球体就做好了。用到的就是简单的球面方程:已知半径r和球心,一般为了方便,我们都以坐标轴原点为球心,有下面三个方程x=r*sinθ*cosΦ y=r*sinθ*sinΦ z=r*cosθ;也就是说,我们可以对θ和Φ取随机数,来获得圆上的随机点坐标。但仅此还不够,因为如果要做3D标签云,一个很重要点的就是平均分布。如果单纯的取随机坐标,会导致一些标签重叠,相对来说就没那么美观了.怎么解决呢,自己搞吧,我也不懂。这是引用大牛的话,真的很犀利。
2.最近看到MVP们都在搞高并发测试。
3.openSSL闹得凶啊。
4.spinner:微调;county:城镇,县
二、代码实例
博客园自带的CnblogsCode老出问题,代码显示不完整,究竟咋回事
1.单选框RadioGroup
main.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/encinfo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="20px" android:text="请选择要使用的文字编码:" /> <RadioGroup android:id="@+id/encoding" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:checkedButton="@+id/gbk"> <RadioButton android:id="@+id/utf" android:text="UTF编码" /> <RadioButton android:id="@+id/gbk" android:text="GBK编码" /> </RadioGroup> <TextView android:id="@+id/sexinfo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="20px" android:text="您的性别是:" /> <RadioGroup android:id="@+id/sex" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:checkedButton="@+id/male"> <RadioButton android:id="@+id/male" android:text="男" /> <RadioButton android:id="@+id/female" android:text="女" /> </RadioGroup> </LinearLayout>
2.复选框CheckBox
MainActivitypackage org.lxh.demo; import android.app.Activity; import android.os.Bundle; import android.widget.CheckBox; public class MyCheckBoxDemo extends Activity { private CheckBox box = null; // 定义组件 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); this.box = (CheckBox) super.findViewById(R.id.url3); // 取得组件 this.box.setChecked(true); // 将此组件设置为默认选中 this.box.setText("www.jiangker.com"); // 设置显示文字 } }
main.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/info" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="您经常浏览的网站是:" /> <CheckBox android:id="@+id/url1" android:text="www.mldn.cn" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <CheckBox android:id="@+id/url2" android:text="bbs.mldn.cn" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <CheckBox android:id="@+id/url3" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
3.固定下拉
Activitypackage org.lxh.demo; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.Spinner; public class MySpinnerDemo extends Activity { private Spinner spiColor = null; // 表示要读取的颜色列表框 private ArrayAdapter<CharSequence> adapterColor = null; // 所有的数据都是String @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); this.spiColor = (Spinner) super.findViewById(R.id.mycolor); // 取得颜色的下拉框 this.spiColor.setPrompt("请选择您喜欢的颜色:"); //下面这两句不太懂 this.adapterColor = ArrayAdapter.createFromResource(this, R.array.color_labels, android.R.layout.simple_spinner_item); // 实例化了ArrayAdapter this.adapterColor .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 换个风格 this.spiColor.setAdapter(this.adapterColor); // 设置显示信息 } }
main.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/info_city" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="请选择您喜欢的城市:" /> <Spinner android:id="@+id/mycity" android:prompt="@string/city_prompt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:entries="@array/city_labels"/> <TextView android:id="@+id/info_color" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="请选择您喜欢的颜色:" /> <Spinner android:id="@+id/mycolor" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/info_edu" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="请选择您的学历:" /> <Spinner android:id="@+id/myedu" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
city<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="color_labels"> <item>红色</item> <item>绿色</item> <item>蓝色</item> </string-array> </resources>
color<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="color_labels"> <item>红色</item> <item>绿色</item> <item>蓝色</item> </string-array> </resources>
string<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, MySpinnerDemo!</string> <string name="app_name">下拉列表</string> <string name="city_prompt">请选择您喜欢的城市:</string> </resources>
4.动态生成下拉内容
结构和上面一样,不过Edu都是动态生成的,就是从list里获取。
Activitypackage org.lxh.demo; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.Spinner; public class MySpinnerDemo extends Activity { private Spinner spiColor = null; // 表示要读取的颜色列表框 private Spinner spiEdu = null; // 定义下拉列表 private ArrayAdapter<CharSequence> adapterColor = null; // 所有的数据都是String private ArrayAdapter<CharSequence> adapterEdu = null; // 所有的数据肯定是字符串 private List<CharSequence> dataEdu = null; // 定义一个集合数据 /* * 既然list里是Sting,为什么不用呢,所以我想CharSequence和Sting什么区别呢? * 查看javaAPI得知,CharSequence是接口,String是其实现类。 * CharSequence 是 char 值的一个可读序列,是接口,String本质上是通过字符数实现的。 * 那么换成String行吗,不行 * 第31行提示转换错误 */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); this.spiColor = (Spinner) super.findViewById(R.id.mycolor); // 取得颜色的下拉框 this.spiColor.setPrompt("请选择您喜欢的颜色:"); this.adapterColor = ArrayAdapter.createFromResource(this, R.array.color_labels, android.R.layout.simple_spinner_item); // 实例化了ArrayAdapter this.adapterColor .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 换个风格 this.spiColor.setAdapter(this.adapterColor); // 设置显示信息 // 配置List集合包装的下拉框内容 this.dataEdu = new ArrayList<CharSequence>(); this.dataEdu.add("大学"); this.dataEdu.add("研究生"); this.dataEdu.add("高中"); this.spiEdu = (Spinner) super.findViewById(R.id.myedu); // 取得下拉框 this.spiEdu.setPrompt("请选择您喜欢的学历:"); //只是下面这个方法不同而已 this.adapterEdu = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, this.dataEdu); // 准备好下拉列表框的内容 this.adapterEdu .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 换个风格 this.spiEdu.setAdapter(this.adapterEdu); } }
5.Spinner二级联动
点击第一级都要触发事件,关键还是怎么添加资源文件。
Activitypackage org.lxh.demo; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; public class MainActivity extends Activity { private TextView textView ; private Spinner province; private Spinner city; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textView = (TextView)this.findViewById(R.id.textView); province = (Spinner)this.findViewById(R.id.province); city = (Spinner)this.findViewById(R.id.city); //(处理省的显示) //将可选内容与ArrayAdapter的连接(从资源数组文件中获取数据) ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.province, android.R.layout.simple_spinner_item); //设置下拉列表的风格 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //将数据绑定到Spinner视图上 province.setAdapter(adapter); //第二个默认被选中 province.setSelection(1, true); //添加条目被选中监听器 province.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view,int position, long id) { //parent既是province对象 Spinner spinner = (Spinner)parent; String pro = (String)spinner.getItemAtPosition(position); //(处理省的市的显示) //将默认值与ArrayAdapter连接(从资源数组文件中获取数据) //下面的R.array.province随意都行 ArrayAdapter<CharSequence> cityAdapter = ArrayAdapter.createFromResource (MainActivity.this, R.array.province, android.R.layout.simple_spinner_item); //new ArrayAdapter<CharSequence> // (MainActivity.this,android.R.layout.simple_spinner_item, cities); //获取所在省含有哪些市(从资源数组文件中获取数据) if(pro.equals("河北省")){ cityAdapter = ArrayAdapter.createFromResource (MainActivity.this, R.array.hb, android.R.layout.simple_spinner_item); }else if(pro.equals("北京市")){ cityAdapter = ArrayAdapter.createFromResource (MainActivity.this, R.array.bj, android.R.layout.simple_spinner_item); }else if(pro.equals("山西省")){ cityAdapter = ArrayAdapter.createFromResource (MainActivity.this, R.array.shx, android.R.layout.simple_spinner_item); } //绑定数据到Spinner(City)上 city.setAdapter(cityAdapter); } public void onNothingSelected(AdapterView<?> parent) { } }); } }
main.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/textView" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <Spinner android:id="@+id/province" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Spinner android:id="@+id/city" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/province" /> </RelativeLayout> </LinearLayout>
main.xml<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="province"> <item>-省份-</item> <item>河北省</item> <item>山西省</item> <item>北京市</item> </string-array> <string-array name="hb"> <item>-城市-</item> <item>承德市</item> <item>邯郸市</item> <item>廊坊市</item> </string-array> <string-array name="bj"> <item>-城市-</item> <item>海淀区</item> <item>朝阳区</item> <item>崇文区</item> </string-array> <string-array name="shx"> <item>-城市-</item> <item>大同市</item> <item>临汾市</item> </string-array> </resources>
要获取下拉框spinner中选中的值,用下面这方法就OK了.
province.getSelectedItem().toString(); city.getSelectedItem().toString();
三、后记
查资料的过程中发现很多原创博文被挂在不知名的网站上,估计是自动抓取过来的,笔者在此除了表示气愤以外也没有别的办法,我就想抓取和Android的消息推送有没有关系,还有就是如何防止博文被盗链,希望路过的看官给留点资料。
关于博客园自带代码插件CnblogsCode在writer里代码显示不完整问题我已反应,dudu说确实有问题,需要时间来解决。