一、基礎學習
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說確實有問題,需要時間來解決。