Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

backup

  • Loading branch information...
commit d86d3d2b87611c96cad9180de1e32649c6519ea3 1 parent 69ec28b
@oa414 authored
View
BIN  .DS_Store
Binary file not shown
View
BIN  Android/.DS_Store
Binary file not shown
View
1  Android/1.html
@@ -0,0 +1 @@
+#<File:0x007ff7ec0bd8a8>
View
636 Android/AndroidRecipes.html
@@ -0,0 +1,636 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN"
+ "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
+<html xml:lang='en' xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/1999/xhtml'>
+<head><meta content='application/xhtml+xml;charset=utf-8' http-equiv='Content-type' /><title></title></head>
+<body>
+<h3 id='id1'>自定义窗口 </h3>
+
+<p>AndroidMainfest.xml 里面的android:theme</p>
+
+<p>* 使用系统主题 * 使用自定义主题 res/values/styles.xml定义 * 代码里定义</p>
+
+<pre><code> 使用Activity.requestWindowFeature(),
+ 在setContentView()之前定义
+
+ super.onCreate(savedInstanceState);
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
+ //设置一个没有标题的窗口
+ setContentView(R.layout.activity_main);
+
+
+ //设置一个进度条
+ super.onCreate(savedInstanceState);
+ requestWindowFeature(Window.FEATURE_PROGRESS);
+ setContentView(R.layout.activity_main);
+
+ setProgressBarVisibility(true);
+ setProgress(0);
+ setProgress(10000);//进度条到100%的时候消失
+
+ //设置另一种进度条
+ super.onCreate(savedInstanceState);
+ requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
+ setContentView(R.layout.activity_main);
+ setProgressBarIndeterminateVisibility(true);
+
+ 另外还有FEATURE_LEFT_ICON,FEATURE_RIGHT_ICON可以定义标题左侧,右侧的小图标等</code></pre>
+
+<h3 id='id2'>代码中添加视图</h3>
+
+<pre><code> LinearLayout layout = (LinearLayout) getLayoutInflater().inflate(
+ R.layout.activity_main, null);
+ Button reset = new Button(this);
+ reset.setText(&quot;Reset Form&quot;);
+ layout.addView(reset, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
+ LayoutParams.WRAP_CONTENT));
+ setContentView(layout);</code></pre>
+
+<h3 id='id3'>监听点击</h3>
+
+<p>在XML布局中加入</p>
+
+<pre><code>android:onClick=&quot;lis&quot; </code></pre>
+
+<p>在源代码中就可以用lis方法监听</p>
+
+<pre><code>public void lis(View v) {
+ reset.setText(&quot;Hello, I am after click&quot;);
+}</code></pre>
+
+<h3 id='id4'>图片分辨率适配</h3>
+
+<ul>
+<li>ldpi:120dpi 75% of mdpi</li>
+
+<li>mdpi:160dpi</li>
+
+<li>hdpi:240dpi 150%</li>
+
+<li>xhdpi:320dpi 200%</li>
+</ul>
+
+<h3 id='id5'>锁定活动方向</h3>
+
+<p>在AndroidManifest.xml中的<pre class='markdown-html-error' style='border: solid 3px red; background-color: pink'>REXML could not parse this XML/HTML:
+&lt;activity&gt;标签中设置
+ `android:screenOrientation=&quot; &quot;`可以改变活动方向。</pre></p>
+
+<ul>
+<li>portrait 纵向</li>
+
+<li>landscape 横向</li>
+
+<li>behind 和前一个活动栈的activity一样</li>
+</ul>
+
+<h3 id='id6'>动态改变方向</h3>
+
+<pre><code>setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);</code></pre>
+
+<p>可以读取当前方向信息</p>
+
+<pre><code>int current = getResources().getConfiguration().orientation;</code></pre>
+
+<h3 id='id7'>按钮监听</h3>
+
+<ul>
+<li>
+<p>http://blog.csdn.net/rhljiayou/article/details/7061201</p>
+
+<pre><code>button.setOnClickLisener(this)
+
+public void on Click(View v){
+}</code></pre>
+</li>
+</ul>
+
+<h3 id='dpsp'>DP,SP</h3>
+
+<ul>
+<li>字体一般用SP,可以根据首选项放大缩小</li>
+
+<li>其他用DP</li>
+</ul>
+
+<h3 id='menu'>Menu</h3>
+
+<pre><code>@Override
+public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ Button button = new Button(this);
+ button.setText(&quot;Click For Opition&quot;);
+ button.setOnClickListener( new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ openContextMenu(v);
+ }
+ }
+ );
+ registerForContextMenu(button);
+ setContentView(button);
+}
+
+
+
+
+@Override
+public boolean onContextItemSelected(MenuItem item) {
+ // TODO Auto-generated method stub
+ switch (item.getItemId()) {
+ case R.id.menu_delete:
+ return true; // Do Some Delete
+ case R.id.menu_copy:
+ return true;
+ case R.id.menu_edit:
+ return true;
+ default:
+ break;
+ }
+ return super.onContextItemSelected(item);
+}
+
+
+@Override
+public void onCreateContextMenu(ContextMenu menu, View v,
+ ContextMenuInfo menuInfo) {
+ // TODO Auto-generated method stub
+ super.onCreateContextMenu(menu, v, menuInfo);
+ getMenuInflater().inflate(R.menu.activity_main, menu);
+ menu.setHeaderTitle(&quot;Chose an Opition&quot;);
+}</code></pre>
+
+<p>XML文件是这样的</p>
+
+<pre><code>&lt;menu xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&gt;
+
+&lt;item android:id=&quot;@+id/menu_delete&quot;
+ android:title=&quot;Delete Item&quot;/&gt;
+
+&lt;item
+ android:id=&quot;@+id/menu_copy&quot;
+ android:title=&quot;Copy Item&quot;
+
+ /&gt;
+
+&lt;item
+ android:id=&quot;@+id/menu_edit&quot;
+ android:title=&quot;Edit Item&quot;
+ /&gt;
+&lt;/menu&gt;</code></pre>
+
+<h3 id='toast'>Toast</h3>
+
+<pre><code>Toask.makeText(…).show;</code></pre>
+
+<h3 id='id8'>监听输入框变化</h3>
+
+<pre><code>editText.addTextChangedListener(this)
+
+public void afterTextChanged(Editavle statusText) {
+ doSomething
+}</code></pre>
+
+<p>此外还有</p>
+
+<ul>
+<li>beforeTextChanged</li>
+
+<li>onTextChanged</li>
+</ul>
+
+<h3 id='id9'>色彩</h3>
+
+<p>可以用ARGB的格式:</p>
+
+<pre><code>android:background = &quot;cfff&quot;</code></pre>
+
+<h3 id='id10'>弹出式菜单</h3>
+
+<p>public class MainActivity extends Activity {</p>
+
+<p>AlertDialog actions;</p>
+
+<pre><code>@Override
+public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ setTitle(&quot;Hello World&quot;);
+ Button button= new Button(this);
+ button.setText(&quot;Click for Option&quot;);
+ button.setOnClickListener(buttOnClickListener);
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(&quot;Hello, I&#39;m a DialogAlert&quot;);
+ String []optionStrings = {
+ &quot;Delete Item&quot;,
+ &quot;Copy Item&quot;,
+ &quot;Edit Item&quot;
+ };
+ builder.setItems(optionStrings, actionListener);
+ builder.setNegativeButton(&quot;Cancel&quot;, null);
+ actions = builder.create();
+
+ setContentView(button);
+}
+
+DialogInterface.OnClickListener actionListener =
+ new DialogInterface.OnClickListener( ) {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ // TODO Auto-generated method stub
+ switch (which) {
+ case 0:
+ break;
+ case 1:
+ break;
+ case 2:
+ break;
+ default:
+ break;
+ }
+ }
+ };
+
+View.OnClickListener buttOnClickListener = new View.OnClickListener( ) {
+
+ @Override
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ actions.show();
+
+ }
+};</code></pre>
+
+<h3 id='id11'>监听按键</h3>
+
+<p>重载onKeyDown, onKeyup方法</p>
+
+<pre><code>@Override
+public boolean onKeyDown(int keyCode, KeyEvent event) {
+ // TODO Auto-generated method stub
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+
+ return true;
+ }
+ return super.onKeyUp(keyCode, event);
+}</code></pre>
+
+<p>API Level5以上提供专门的方法</p>
+
+<pre><code>@Override
+public void onBackPressed() {
+ setTitle(&quot;OOXX&quot;);
+}</code></pre>
+
+<h3 id='id12'>通过监听按键启动活动</h3>
+
+<pre><code>@Override
+public boolean onKeyDown(int keyCode, KeyEvent event) {
+ // TODO Auto-generated method stub
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.addCategory(Intent.CATEGORY_APP_MAPS);
+ startActivity(intent);
+ return true;
+ }
+ return super.onKeyDown(keyCode, event);
+}</code></pre>
+
+<h3 id='textview'>监听TextView</h3>
+
+<p>通过<code>implements TextWather</code></p>
+
+<pre><code>@Override
+public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ text = new EditText(this);
+ text.addTextChangedListener(this);
+ setContentView(text);
+}
+
+
+@Override
+public void onTextChanged(CharSequence s, int start, int before, int count) {
+ // TODO Auto-generated method stub
+ textCount = text.getText().length();
+ setTitle(String.valueOf(textCount));
+}</code></pre>
+
+<h3 id='synchronized'>synchronized</h3>
+
+<p> java中的synchronized是线程锁定  </p>
+
+<h3 id='textview'>自定义TextView</h3>
+
+<pre><code>public class Currency implements TextWatcher {
+ boolean mEditing;
+
+ public Currency() {
+ mEditing = false;
+ }
+
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ // TODO Auto-generated method stub
+ if (!mEditing) {
+ mEditing = true;
+ String dight = s.toString().replaceAll(&quot;\\D&quot;, &quot;&quot;);
+ NumberFormat nf = NumberFormat.getCurrencyInstance();
+ try {
+ String formatted = nf.format(Double.parseDouble(dight)/100);
+ s.replace(0, s.length(), formatted);
+ }catch (NumberFormatException nfe) {
+ s.clear();
+ }
+ mEditing = false;
+ }
+
+ }
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count,
+ int after) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before,
+ int count) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
+@Override
+public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ text = new EditText(this);
+ text.addTextChangedListener(new Currency());
+ setContentView(text);
+}</code></pre>
+
+<h2 id='id13'>文字滚动</h2>
+
+<pre><code>@Override
+public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ TextView tickerTextView = (TextView)findViewById(R.id.ticker);
+ tickerTextView.setSelected(true);
+}
+
+
+&lt;TextView
+ android:layout_width=&quot;wrap_content&quot;
+ android:layout_height=&quot;wrap_content&quot;
+ android:singleLine=&quot;true&quot;
+ android:id=&quot;@+id/ticker&quot;
+ android:scrollHorizontally=&quot;true&quot;
+ android:ellipsize=&quot;marquee&quot;
+ android:marqueeRepeatLimit=&quot;marquee_forever&quot;
+ android:text=&quot;fdasfasfdsafklasfmdksalmflasfmdlasfmlasf
+ fdasfsadaaaaaaaaaa&quot;
+ /&gt;</code></pre>
+
+<p>TextView的android:ellipsize可以定义超出边界的时候的行为。</p>
+
+<ul>
+<li>none 直接裁掉</li>
+
+<li>start 开头裁,有一个省略号</li>
+
+<li>middle 中间裁,有一个省略号</li>
+
+<li>end 末尾裁,一个省略号</li>
+
+<li>marquee 滚动</li>
+</ul>
+
+<h3 id='id14'> 自定义背景布局</h3>
+
+<p>在drawable定义一个xml文件 <code>background.xml</code></p>
+
+<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;shape xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
+ android:shape=&quot;rectangle&quot;&gt;
+
+ &lt;gradient
+ android:startColor=&quot;#111111&quot;
+ android:endColor=&quot;#989898&quot;
+ android:type=&quot;linear&quot;
+ android:angle=&quot;270&quot;
+ /&gt;
+
+&lt;/shape&gt;</code></pre>
+
+<p>就可以在布局中用<code>android:background=&quot;@drawable/background&quot;</code>定义背景了。这里实现的是一个渐变颜色的效果。</p>
+
+<h3 id='activity'>把Activity弄成对话框一样</h3>
+
+<p>修改Activity主题</p>
+
+<pre><code> &lt;activity
+ android:name=&quot;.MainActivity&quot;
+ android:label=&quot;@string/title_activity_main&quot;
+ android:theme=&quot;@android:style/Theme.Dialog&quot;&gt;
+ &lt;intent-filter&gt;
+ &lt;action android:name=&quot;android.intent.action.MAIN&quot; /&gt;
+
+ &lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&gt;
+ &lt;/intent-filter&gt;
+ &lt;/activity&gt;</code></pre>
+
+<p>代码里面给TextView弄一点留白</p>
+
+<pre><code> TextView tView = new TextView(this);
+ tView.setText(&quot;fdasfsafas&quot;);
+ tView.setPadding(12, 21, 12, 21);
+ setContentView(tView);</code></pre>
+
+<h3 id='id15'>创建不同布局的资源文件</h3>
+
+<p>对于不同的方向,资源文件名后面添加-land 或者 -port</p>
+
+<p>不同尺寸,资源文件名后面添加-small, -medium或者-large,-xlarge(注意是屏幕物理尺寸)</p>
+
+<h3 id='id16'>发送短信</h3>
+
+<pre><code>private void sendSMS(String message, String phoneNumber) {
+ SmsManager sms = SmsManager.getDefault();
+ List&lt;String&gt; texts = sms.divideMessage(message);
+
+ for (String text : texts) {
+ sms.sendTextMessage(phoneNumber, null, message, null, null);
+ Log.i(&quot;sms&quot;, &quot;send a message&quot;);
+ }
+}</code></pre>
+
+<h3 id='id17'>显示网页</h3>
+
+<p>要打开Internet权限</p>
+
+<pre><code>   WebView webview = new WebView(this);
+ webview.getSettings().setJavaScriptEnabled(true);
+ webview.loadUrl(&quot;http://linxiangyu.info&quot;);
+ setContentView(webview);</code></pre>
+
+<h3 id='webview_'>WebView 显示本地图片或资源</h3>
+
+<pre><code>loadURL(&quot;file:///android_asset/android.jpg&quot;);
+
+loadData(htmlString, &quot;text/html&quot;, &quot;utf-8&quot;);//htmlString是一个html格式的字符串</code></pre>
+
+<h3 id='id18'>下载图片</h3>
+
+<p>注:这个程序运行的时候意外退出</p>
+
+<p>建立WebImageView类</p>
+
+<pre><code>package com.example.teset;
+
+import java.io.BufferedInputStream;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.apache.http.util.ByteArrayBuffer;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.AsyncTask;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+
+public class WebImageView extends ImageView {
+ private Drawable mPlaceholder, mImage;
+
+
+public WebImageView (Context context) {
+ this(context, null);
+
+}
+
+public WebImageView (Context context, AttributeSet attrs) {
+ this(context, null, 0);
+
+}
+
+public WebImageView (Context context, AttributeSet attrs,int defualtStyle) {
+ super(context, null, defualtStyle);
+
+}
+
+
+public void setPlaceholderImage(Drawable drawable) {
+ mPlaceholder = drawable;
+ if (mImage == null)
+ setImageDrawable(mPlaceholder);
+}
+
+
+public void setPlaceholderImage(int resid) {
+ mPlaceholder = getResources().getDrawable(resid);
+ if (mImage == null) {
+ setImageDrawable(mPlaceholder);
+ }
+}
+
+public void setImageUrl(String url) {
+ DownlandTask task = new DownlandTask();
+ task.execute(url);
+}
+
+
+private class DownlandTask extends AsyncTask&lt;String, Void, Bitmap&gt; {
+
+ @Override
+ protected Bitmap doInBackground(String... params) {
+ // TODO Auto-generated method stub
+ String url = params[0];
+ try {
+ URLConnection connection = (new URL(url)).openConnection();
+ InputStream is = connection.getInputStream();
+ BufferedInputStream bis = new BufferedInputStream(is);
+ ByteArrayBuffer baf = new ByteArrayBuffer(50);
+ int current = 0;
+ while ((current = bis.read()) != -1) {
+ baf.append((byte)current);
+ }
+ byte [] imageData = baf.toByteArray();
+ return BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
+ } catch (Exception e) {
+ return null;
+ // TODO: handle exception
+ }
+ }
+
+
+ @SuppressWarnings(&quot;deprecation&quot;)
+ @Override
+ protected void onPostExecute(Bitmap result) {
+ mImage = new BitmapDrawable(result);
+ if (mImage != null) {
+ setImageDrawable(mImage);
+ }
+ }
+
+
+}</code></pre>
+
+<p>}</p>
+
+<p>主程序调用</p>
+
+<pre><code> WebImageView imageView = (WebImageView)findViewById(R.id.webImage);
+ //imageView.setPlaceholderImage(R.drawable.icon);
+ //imageView.setImageUrl(&quot;http://www.ruby-lang.org/images/logo.gif&quot;);</code></pre>
+
+<p>layout声明</p>
+
+<p>因为不属于Android包,所以必须有完整声明</p>
+
+<pre><code>&lt;com.examples.WebImageView
+ android:id = &quot;@+ id/webImage&quot;
+ android:layout_width=&quot;wrap_content&quot;
+ android:layout_height=&quot;wrap_content&quot;
+ /&gt;</code></pre>
+
+<p>注意:Android的UI类都是非线程安全的。一样要在主程序中用回调方法来更新UI,不要在doInBackground中更新。</p>
+
+<pre><code>@Override
+public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.activity_main, menu);
+ return true;
+}
+}</code></pre>
+
+<h2 id='json'>解析JSON</h2>
+
+<p>JSON太多引号转义,Java又没有原始字符串,就不写了。</p>
+
+<p>另外还有.getJSONOBject方法</p>
+
+<pre><code> try {
+ JSONObject personJsonObject = (new JSONObject(JSON_STRING).getJSONObject(&quot;person&quot;));
+ String name line1 = personJsonObject.getString(&quot;name&quot;);
+ line1.setText(&quot;The person&#39;s name is&quot; + name );
+ line2.setText(name + &quot;has&quot; + personJsonObject.getJSONArray(&quot;chrildred&quot;).length + &quot;chirldren&quot;);
+
+ }catch (JSONException e) {
+ e.printStackTrace();
+ }</code></pre>
+</body></html>
View
500 Android/AndroidRecipes.md
@@ -94,7 +94,14 @@ AndroidMainfest.xml 里面的android:theme
}
-### 菜单选项
+### DP,SP
+- 字体一般用SP,可以根据首选项放大缩小
+- 其他用DP
+
+
+### Menu
+
+
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -131,13 +138,8 @@ AndroidMainfest.xml 里面的android:theme
}
return super.onContextItemSelected(item);
}
-### DP,SP
-- 字体一般用SP,可以根据首选项放大缩小
-- 其他用DP
-### Menu
-
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
@@ -166,28 +168,7 @@ XML文件是这样的
/>
</menu>
-
-### Log
-- .d() debug
-- .e() error
-- .i() info
-- .w() warnning
-- .wtf() what the fuck…
-### 多线程
-
- class getImage extends AsyncTask<String, String, String> {
-
- @Override
- protected String doInBackground(String... params) {
- }
- }
-
- - doInBackgroud 后台
- - onProgressUpdate 更新状态
- - onPostExecute 执行完毕触发
-
- 调用new getImage.execute(args)触发
### Toast
Toask.makeText(…).show;
@@ -208,4 +189,467 @@ XML文件是这样的
android:background = "cfff"
-
+### 弹出式菜单
+
+public class MainActivity extends Activity {
+
+
+AlertDialog actions;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ setTitle("Hello World");
+ Button button= new Button(this);
+ button.setText("Click for Option");
+ button.setOnClickListener(buttOnClickListener);
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle("Hello, I'm a DialogAlert");
+ String []optionStrings = {
+ "Delete Item",
+ "Copy Item",
+ "Edit Item"
+ };
+ builder.setItems(optionStrings, actionListener);
+ builder.setNegativeButton("Cancel", null);
+ actions = builder.create();
+
+ setContentView(button);
+ }
+
+ DialogInterface.OnClickListener actionListener =
+ new DialogInterface.OnClickListener( ) {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ // TODO Auto-generated method stub
+ switch (which) {
+ case 0:
+ break;
+ case 1:
+ break;
+ case 2:
+ break;
+ default:
+ break;
+ }
+ }
+ };
+
+ View.OnClickListener buttOnClickListener = new View.OnClickListener( ) {
+
+ @Override
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ actions.show();
+
+ }
+ };
+
+
+
+### 监听按键
+
+重载onKeyDown, onKeyup方法
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ // TODO Auto-generated method stub
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+
+ return true;
+ }
+ return super.onKeyUp(keyCode, event);
+ }
+
+API Level5以上提供专门的方法
+
+ @Override
+ public void onBackPressed() {
+ setTitle("OOXX");
+ }
+
+### 通过监听按键启动活动
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ // TODO Auto-generated method stub
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.addCategory(Intent.CATEGORY_APP_MAPS);
+ startActivity(intent);
+ return true;
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+
+### 监听TextView
+
+
+通过`implements TextWather`
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ text = new EditText(this);
+ text.addTextChangedListener(this);
+ setContentView(text);
+ }
+
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ // TODO Auto-generated method stub
+ textCount = text.getText().length();
+ setTitle(String.valueOf(textCount));
+ }
+
+### synchronized
+ java中的synchronized是线程锁定
+ 
+### 自定义TextView
+
+
+ public class Currency implements TextWatcher {
+ boolean mEditing;
+
+ public Currency() {
+ mEditing = false;
+ }
+
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ // TODO Auto-generated method stub
+ if (!mEditing) {
+ mEditing = true;
+ String dight = s.toString().replaceAll("\\D", "");
+ NumberFormat nf = NumberFormat.getCurrencyInstance();
+ try {
+ String formatted = nf.format(Double.parseDouble(dight)/100);
+ s.replace(0, s.length(), formatted);
+ }catch (NumberFormatException nfe) {
+ s.clear();
+ }
+ mEditing = false;
+ }
+
+ }
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count,
+ int after) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before,
+ int count) {
+ // TODO Auto-generated method stub
+
+ }
+
+ }
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ text = new EditText(this);
+ text.addTextChangedListener(new Currency());
+ setContentView(text);
+ }
+
+
+## 文字滚动
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ TextView tickerTextView = (TextView)findViewById(R.id.ticker);
+ tickerTextView.setSelected(true);
+ }
+
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:id="@+id/ticker"
+ android:scrollHorizontally="true"
+ android:ellipsize="marquee"
+ android:marqueeRepeatLimit="marquee_forever"
+ android:text="fdasfasfdsafklasfmdksalmflasfmdlasfmlasf
+ fdasfsadaaaaaaaaaa"
+ />
+
+TextView的android:ellipsize可以定义超出边界的时候的行为。
+
+- none 直接裁掉
+- start 开头裁,有一个省略号
+- middle 中间裁,有一个省略号
+- end 末尾裁,一个省略号
+- marquee 滚动
+
+### 自定义背景布局
+
+
+在drawable定义一个xml文件 `background.xml`
+
+ <?xml version="1.0" encoding="utf-8"?>
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+
+ <gradient
+ android:startColor="#111111"
+ android:endColor="#989898"
+ android:type="linear"
+ android:angle="270"
+ />
+
+ </shape>
+
+
+ 就可以在布局中用`android:background="@drawable/background"`定义背景了。这里实现的是一个渐变颜色的效果。
+
+
+### 把Activity弄成对话框一样
+
+
+修改Activity主题
+
+ <activity
+ android:name=".MainActivity"
+ android:label="@string/title_activity_main"
+ android:theme="@android:style/Theme.Dialog">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+
+
+ 代码里面给TextView弄一点留白
+
+ TextView tView = new TextView(this);
+ tView.setText("fdasfsafas");
+ tView.setPadding(12, 21, 12, 21);
+ setContentView(tView);
+
+
+### 创建不同布局的资源文件
+
+对于不同的方向,资源文件名后面添加-land 或者 -port
+
+不同尺寸,资源文件名后面添加-small, -medium或者-large,-xlarge(注意是屏幕物理尺寸)
+
+### 发送短信
+
+
+ private void sendSMS(String message, String phoneNumber) {
+ SmsManager sms = SmsManager.getDefault();
+ List<String> texts = sms.divideMessage(message);
+
+ for (String text : texts) {
+ sms.sendTextMessage(phoneNumber, null, message, null, null);
+ Log.i("sms", "send a message");
+ }
+ }
+
+### 显示网页
+
+要打开Internet权限
+
+
+    WebView webview = new WebView(this);
+ webview.getSettings().setJavaScriptEnabled(true);
+ webview.loadUrl("http://linxiangyu.info");
+ setContentView(webview);
+
+
+
+ loadView 乱码
+
+
+ http://www.eoeandroid.com/thread-990-1-1.html
+
+ 如果单纯显示文字的话可以写webView.loadDataWithBaseURL(null, string, "text/html", "utf-8", null);
+
+
+ 如果要显示图片可以写webView.loadDataWithBaseURL(baseUrl, string, "text/html", "utf-8", null);
+ 其中baseUrl为你存储照片的路径,比如:
+ String baseUrl="file:///sdcard/images/photo/";
+
+http://blog.sina.com.cn/s/blog_4c0706560100r8qy.html
+
+ 2. 许多实用loadData方法的朋友都遇到显示乱码的问题,那是因为编码器设置错误导致的。我们知道String类型的数据主要是unicode编码,而WebView一般为了节省资源使用的是UTF-8编码,所以我们在loadData的时候要告诉方法怎样转码。即要告诉它要将unicode编码的内容转成UTF-8编码的内容。有些朋友虽然在loadData的时候设置了编码方式,但是还是显示乱码,这是因为还需要为WebView的text编码指定编码方式。举例如下:
+ WebView wv = (WebView)findViewById(R.id.webview) ;
+ String content = getUnicodeContent() ;
+ wv.getSettings().setDefaultTextEncodingName(“UTF -8”) ;
+ wv.loadData(content, “text/html”, “UTF-8”) ;
+
+### WebView 显示本地图片或资源
+
+ loadURL("file:///android_asset/android.jpg");
+
+ loadData(htmlString, "text/html", "utf-8");//htmlString是一个html格式的字符串
+
+### 下载图片
+
+注:这个程序运行的时候意外退出
+
+
+建立WebImageView类
+
+
+ package com.example.teset;
+
+ import java.io.BufferedInputStream;
+ import java.io.InputStream;
+ import java.net.URL;
+ import java.net.URLConnection;
+
+ import org.apache.http.util.ByteArrayBuffer;
+
+ import android.content.Context;
+ import android.graphics.Bitmap;
+ import android.graphics.BitmapFactory;
+ import android.graphics.drawable.BitmapDrawable;
+ import android.graphics.drawable.Drawable;
+ import android.os.AsyncTask;
+ import android.util.AttributeSet;
+ import android.widget.ImageView;
+
+ public class WebImageView extends ImageView {
+ private Drawable mPlaceholder, mImage;
+
+
+ public WebImageView (Context context) {
+ this(context, null);
+
+ }
+
+ public WebImageView (Context context, AttributeSet attrs) {
+ this(context, null, 0);
+
+ }
+
+ public WebImageView (Context context, AttributeSet attrs,int defualtStyle) {
+ super(context, null, defualtStyle);
+
+ }
+
+
+ public void setPlaceholderImage(Drawable drawable) {
+ mPlaceholder = drawable;
+ if (mImage == null)
+ setImageDrawable(mPlaceholder);
+ }
+
+
+ public void setPlaceholderImage(int resid) {
+ mPlaceholder = getResources().getDrawable(resid);
+ if (mImage == null) {
+ setImageDrawable(mPlaceholder);
+ }
+ }
+
+ public void setImageUrl(String url) {
+ DownlandTask task = new DownlandTask();
+ task.execute(url);
+ }
+
+
+ private class DownlandTask extends AsyncTask<String, Void, Bitmap> {
+
+ @Override
+ protected Bitmap doInBackground(String... params) {
+ // TODO Auto-generated method stub
+ String url = params[0];
+ try {
+ URLConnection connection = (new URL(url)).openConnection();
+ InputStream is = connection.getInputStream();
+ BufferedInputStream bis = new BufferedInputStream(is);
+ ByteArrayBuffer baf = new ByteArrayBuffer(50);
+ int current = 0;
+ while ((current = bis.read()) != -1) {
+ baf.append((byte)current);
+ }
+ byte [] imageData = baf.toByteArray();
+ return BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
+ } catch (Exception e) {
+ return null;
+ // TODO: handle exception
+ }
+ }
+
+
+ @SuppressWarnings("deprecation")
+ @Override
+ protected void onPostExecute(Bitmap result) {
+ mImage = new BitmapDrawable(result);
+ if (mImage != null) {
+ setImageDrawable(mImage);
+ }
+ }
+
+
+ }
+}
+
+
+主程序调用
+
+ WebImageView imageView = (WebImageView)findViewById(R.id.webImage);
+ //imageView.setPlaceholderImage(R.drawable.icon);
+ //imageView.setImageUrl("http://www.ruby-lang.org/images/logo.gif");
+
+
+
+layout声明
+
+因为不属于Android包,所以必须有完整声明
+
+
+ <com.examples.WebImageView
+ android:id = "@+ id/webImage"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ />
+
+注意:Android的UI类都是非线程安全的。一样要在主程序中用回调方法来更新UI,不要在doInBackground中更新。
+
+
+
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.activity_main, menu);
+ return true;
+ }
+ }
+
+
+
+## 解析JSON
+
+JSON太多引号转义,Java又没有原始字符串,就不写了。
+
+另外还有.getJSONOBject方法
+
+ try {
+ JSONObject personJsonObject = (new JSONObject(JSON_STRING).getJSONObject("person"));
+ String name line1 = personJsonObject.getString("name");
+ line1.setText("The person's name is" + name );
+ line2.setText(name + "has" + personJsonObject.getJSONArray("chrildred").length + "chirldren");
+
+ }catch (JSONException e) {
+ e.printStackTrace();
+ }
View
40 Android/IntentAndActivity.md
@@ -1,8 +1,44 @@
-
+ ### 启动活动
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(data));
// data可以是http://也可以是tel://.如果定义的是tel://110就是给110打电话
startActivity(intent)
-
+
+
+ ### 监听按键
+
+重载onKeyDown, onKeyup方法
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ // TODO Auto-generated method stub
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+
+ return true;
+ }
+ return super.onKeyUp(keyCode, event);
+ }
+
+API Level5以上提供专门的方法
+
+ @Override
+ public void onBackPressed() {
+ setTitle("OOXX");
+ }
+
+### 通过监听按键启动活动
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ // TODO Auto-generated method stub
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.addCategory(Intent.CATEGORY_APP_MAPS);
+ startActivity(intent);
+ return true;
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+
View
156 Android/data.md
@@ -0,0 +1,156 @@
+
+## 解析JSON
+
+JSON太多引号转义,Java又没有原始字符串,就不写了。
+
+另外还有.getJSONOBject方法
+
+ try {
+ JSONObject personJsonObject = (new JSONObject(JSON_STRING).getJSONObject("person"));
+ String name line1 = personJsonObject.getString("name");
+ line1.setText("The person's name is" + name );
+ line2.setText(name + "has" + personJsonObject.getJSONArray("chrildred").length + "chirldren");
+
+ }catch (JSONException e) {
+ e.printStackTrace();
+ }
+
+
+
+### 下载图片
+
+注:这个程序运行的时候意外退出
+
+
+建立WebImageView类
+
+
+ package com.example.teset;
+
+ import java.io.BufferedInputStream;
+ import java.io.InputStream;
+ import java.net.URL;
+ import java.net.URLConnection;
+
+ import org.apache.http.util.ByteArrayBuffer;
+
+ import android.content.Context;
+ import android.graphics.Bitmap;
+ import android.graphics.BitmapFactory;
+ import android.graphics.drawable.BitmapDrawable;
+ import android.graphics.drawable.Drawable;
+ import android.os.AsyncTask;
+ import android.util.AttributeSet;
+ import android.widget.ImageView;
+
+ public class WebImageView extends ImageView {
+ private Drawable mPlaceholder, mImage;
+
+
+ public WebImageView (Context context) {
+ this(context, null);
+
+ }
+
+ public WebImageView (Context context, AttributeSet attrs) {
+ this(context, null, 0);
+
+ }
+
+ public WebImageView (Context context, AttributeSet attrs,int defualtStyle) {
+ super(context, null, defualtStyle);
+
+ }
+
+
+ public void setPlaceholderImage(Drawable drawable) {
+ mPlaceholder = drawable;
+ if (mImage == null)
+ setImageDrawable(mPlaceholder);
+ }
+
+
+ public void setPlaceholderImage(int resid) {
+ mPlaceholder = getResources().getDrawable(resid);
+ if (mImage == null) {
+ setImageDrawable(mPlaceholder);
+ }
+ }
+
+ public void setImageUrl(String url) {
+ DownlandTask task = new DownlandTask();
+ task.execute(url);
+ }
+
+
+ private class DownlandTask extends AsyncTask<String, Void, Bitmap> {
+
+ @Override
+ protected Bitmap doInBackground(String... params) {
+ // TODO Auto-generated method stub
+ String url = params[0];
+ try {
+ URLConnection connection = (new URL(url)).openConnection();
+ InputStream is = connection.getInputStream();
+ BufferedInputStream bis = new BufferedInputStream(is);
+ ByteArrayBuffer baf = new ByteArrayBuffer(50);
+ int current = 0;
+ while ((current = bis.read()) != -1) {
+ baf.append((byte)current);
+ }
+ byte [] imageData = baf.toByteArray();
+ return BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
+ } catch (Exception e) {
+ return null;
+ // TODO: handle exception
+ }
+ }
+
+
+ @SuppressWarnings("deprecation")
+ @Override
+ protected void onPostExecute(Bitmap result) {
+ mImage = new BitmapDrawable(result);
+ if (mImage != null) {
+ setImageDrawable(mImage);
+ }
+ }
+
+
+ }
+}
+
+
+主程序调用
+
+ WebImageView imageView = (WebImageView)findViewById(R.id.webImage);
+ //imageView.setPlaceholderImage(R.drawable.icon);
+ //imageView.setImageUrl("http://www.ruby-lang.org/images/logo.gif");
+
+
+
+layout声明
+
+因为不属于Android包,所以必须有完整声明
+
+
+ <com.examples.WebImageView
+ android:id = "@+ id/webImage"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ />
+
+注意:Android的UI类都是非线程安全的。一样要在主程序中用回调方法来更新UI,不要在doInBackground中更新。
+
+
+
+
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.activity_main, menu);
+ return true;
+ }
+ }
+
+
View
20 Android/dev_tools.md
@@ -0,0 +1,20 @@
+
+
+
+### Log
+- .d() debug
+- .e() error
+- .i() info
+- .w() warnning
+- .wtf() what the fuck…
+
+
+### 调试
+
+
+百度 http://mtc.baidu.com/mtc/?pname=mainpage
+云测 http://www.testin.cn/portal.action?op=Portal.index
+中国电信云测试
+
+
+
View
45 Android/game/FullWindows.md
@@ -0,0 +1,45 @@
+
+
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ //隐去电池等图标和一切修饰部分(状态栏部分)
+ this.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ // 隐去标题栏(程序的名字)
+ setContentView(new MyView(this));
+ //启动另外一个view
+ }
+
+
+ package com.example.tedfsafs;
+
+ import android.content.Context;
+ import android.graphics.Canvas;
+ import android.graphics.Color;
+ import android.graphics.Paint;
+ import android.graphics.Rect;
+ import android.graphics.RectF;
+ import android.view.View;
+ public class MyView extends View {
+ private Paint paint ;
+ public MyView(Context context) {
+ super(context);
+ paint = new Paint();
+ paint.setAntiAlias(true);//设置画笔无锯齿(如果不设置可以看到效果很差)
+ this.setKeepScreenOn(true);//设置背景常亮
+ paint.setColor(Color.RED);
+ }
+ @Override
+ public void onDraw(Canvas canvas) {
+ canvas.drawColor(Color.RED);//设置刷屏颜色
+ Rect rect = new Rect(30,30,50,50); //这里最后两个参数不是宽高、而是矩形右下角的坐标
+ canvas.drawRect(rect, paint);
+ RectF rectF = new RectF(70f,30f,90f,90f);//RectF 只是矩形 float形式 只是跟Rect精确度不一样
+ canvas.drawArc(rectF, 0, 360, true, paint);
+ canvas.drawCircle(150, 30, 20, paint);//这也是画圆 第三个参数为半径
+ float[] points =new float[]{200f,10f,200f,40f,300f,30f,400f,70f};
+ canvas.drawLines(points, paint);
+ // canvas.drawLines(points, 1, 4, paint);//选取特定点数组中两点来画出一条直线
+ canvas.drawText("Himi", 230, 30, paint);
+ }
+ }
View
122 Android/listview.md
@@ -0,0 +1,122 @@
+http://www.vogella.com/articles/AndroidListView/article.html
+
+
+- ArrayAdapter can handle data based on Arrays or java.util.List.
+
+- SimpleCursorAdapter can handle database related data. This description focuses on the non database case.
+
+The Android platform provides default layouts for rows in ListViews. For example android.R.layout.simple_list_item1. By default ArrayAdapter uses the android.R.id.text1 ID, but you can define another one in the ArrayAdapter constructor.
+
+Layout
+
+ <?xml version="1.0" encoding="utf-8"?>
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+
+ <ListView
+ android:id="@+id/mylist"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+ </ListView>
+
+ </LinearLayout>
+
+
+Activity
+
+ ListView listView = (ListView) findViewById(R.id.mylist);
+ String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
+ "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
+ "Linux", "OS/2" };
+
+ // First paramenter - Context
+ // Second parameter - Layout for the row
+ // Third parameter - ID of the TextView to which the data is written
+ // Forth - the Array of data
+ ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
+ android.R.layout.simple_list_item_1, android.R.id.text1, values);
+
+ // Assign adapter to ListView
+ listView.setAdapter(adapter);
+
+
+listener
+
+ listView.setOnItemClickListener(new OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view,
+ int position, long id) {
+ Toast.makeText(getApplicationContext(),
+ "Click ListItem Number " + position, Toast.LENGTH_LONG)
+ .show();
+ }
+ });
+
+
+
+自动义行
+
+
+ package de.vogella.android.listactivity;
+
+ import android.content.Context;
+ import android.view.LayoutInflater;
+ import android.view.View;
+ import android.view.ViewGroup;
+ import android.widget.ArrayAdapter;
+ import android.widget.ImageView;
+ import android.widget.TextView;
+
+ public class MySimpleArrayAdapter extends ArrayAdapter<String> {
+ private final Context context;
+ private final String[] values;
+
+ public MySimpleArrayAdapter(Context context, String[] values) {
+ super(context, R.layout.rowlayout, values);
+ this.context = context;
+ this.values = values;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ LayoutInflater inflater = (LayoutInflater) context
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
+ TextView textView = (TextView) rowView.findViewById(R.id.label);
+ ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
+ textView.setText(values[position]);
+ // Change the icon for Windows and iPhone
+ String s = values[position];
+ if (s.startsWith("iPhone")) {
+ imageView.setImageResource(R.drawable.no);
+ } else {
+ imageView.setImageResource(R.drawable.ok);
+ }
+
+ return rowView;
+ }
+ }
+
+listactivity
+
+package de.vogella.android.listactivity;
+
+import android.app.ListActivity;
+import android.os.Bundle;
+import android.widget.ArrayAdapter;
+
+public class MyListActivity extends ListActivity {
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
+ "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
+ "Linux", "OS/2" };
+ ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
+ android.R.layout.simple_list_item_1, values);
+ setListAdapter(adapter);
+ }
+}
+
+
View
6 Android/mobile_dev.md
@@ -0,0 +1,6 @@
+
+
+
+附带一提,微软的XAP包本身不过是一个标准的不能再标准的Zip文件,解压后是含dll在内的全部游戏资源,用Reflector反编译dll,产生的源码足以直接生成原始工程。亲测了几个比较热门的WP游戏与应用,稍微配置下都能直接运行……不是小弟拿微软说事,单论代码安全性,XAP简直还不如APK包(好歹反编译出的APK源码很难直接生成可用的Java工程啊~而XAP面对Reflector则一律秒杀成可用C#项目~),哎。
+
+http://blog.csdn.net/cping1982/article/details/7202480
View
13 Android/system.md
@@ -0,0 +1,13 @@
+### 发送短信
+
+
+ private void sendSMS(String message, String phoneNumber) {
+ SmsManager sms = SmsManager.getDefault();
+ List<String> texts = sms.divideMessage(message);
+
+ for (String text : texts) {
+ sms.sendTextMessage(phoneNumber, null, message, null, null);
+ Log.i("sms", "send a message");
+ }
+ }
+
View
150 Android/thread.md
@@ -0,0 +1,150 @@
+## 多线程
+
+ class getImage extends AsyncTask<String, String, String> {
+
+ @Override
+ protected String doInBackground(String... params) {
+ }
+ }
+
+ - doInBackgroud 后台
+ - onProgressUpdate 更新状态
+ - onPostExecute 执行完毕触发
+
+ 调用new getImage.execute(args)触发
+
+
+
+### 下载文件
+
+ package com.example.teset;
+
+ import java.io.FileInputStream;
+
+ import android.annotation.SuppressLint;
+ import android.app.Activity;
+ import android.app.DownloadManager;
+ import android.app.DownloadManager.Request;
+ import android.content.BroadcastReceiver;
+ import android.content.Context;
+ import android.content.Intent;
+ import android.content.IntentFilter;
+ import android.content.SharedPreferences;
+ import android.database.Cursor;
+ import android.graphics.BitmapFactory;
+ import android.net.Uri;
+ import android.os.Bundle;
+ import android.os.ParcelFileDescriptor;
+ import android.preference.PreferenceManager;
+ import android.view.Menu;
+ import android.widget.ImageView;
+
+ @SuppressLint("NewApi")
+ public class MainActivity extends Activity {
+
+ //所有的工作是在onResume中完成的,所以每次返回状态的时候都会判断下载的状态
+ //DownloadManager.enqeue()返回的ID来引用下载任务,将其保存到应用的设置中
+ //ACTION_DOWNLAND_COMPELETE是DownLodManager为所有完成任务发出的广播,所以要根据ID判断。
+
+
+ ImageView imageView;
+ private DownloadManager dm;
+ private SharedPreferences prefs;
+ private static final String DL_ID="Downland";
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ imageView = new ImageView(this);
+ setContentView(imageView);
+
+ prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ dm = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
+
+ }
+
+
+
+
+
+ @Override
+ protected void onResume() {
+ // TODO Auto-generated method stub
+ super.onResume();
+ if (!prefs.contains(DL_ID)) {
+ //Start Downland
+ Uri resource = Uri.parse("http://bigfoto.com/dog-animal.jpg");
+ DownloadManager.Request request = new DownloadManager.Request(resource);
+ request.setAllowedNetworkTypes(Request.NETWORK_MOBILE | Request.NETWORK_WIFI );
+ request.setAllowedOverRoaming(false);
+ request.setTitle("DownLand Sample"); //Display in the Notification
+ /* request.setTitle
+ * .setDescription
+ * 显示通知栏的信息
+ */
+ long id = dm.enqueue(request); // Save ID
+ prefs.edit().putLong(DL_ID, id).commit();
+ /*
+ * 默认存在缓存中。
+ * Request.setDestination()指定保存在外部存储上的URL
+ * Request.setDestinationInExternalFilesDir()将外部存储上隐藏的文件夹指定为下载位置
+ * Request.setDestinationInExternalPublicDir()外部。。。共享。。。指定为下载位置
+ */
+ }else {
+ // Hava start Downland, to check the status
+ queryDownLandStatus();
+ }
+ registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
+ }
+
+
+
+
+
+ @Override
+ protected void onPause() {
+ // TODO Auto-generated method stub
+ super.onPause();
+ unregisterReceiver(receiver);
+ }
+
+ private BroadcastReceiver receiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ queryDownLandStatus();
+ }
+ };
+
+ private void queryDownLandStatus() {
+ DownloadManager.Query query = new DownloadManager.Query();
+ query.setFilterById(prefs.getLong(DL_ID, 0));
+ Cursor c = dm.query(query);
+ if (c.moveToFirst()) {
+ int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
+ switch (status) {
+ case DownloadManager.STATUS_PAUSED:
+ case DownloadManager.STATUS_PENDING:
+ case DownloadManager.STATUS_RUNNING:
+ break; // DownLanding , need not do anything
+ case DownloadManager.STATUS_SUCCESSFUL:
+ try { // Finish, Display the picture
+ ParcelFileDescriptor file = dm.openDownloadedFile(prefs.getLong(DL_ID, 0));
+ FileInputStream fis = new ParcelFileDescriptor.AutoCloseInputStream(file);
+ imageView.setImageBitmap(BitmapFactory.decodeStream(fis));
+ }catch (Exception e) {
+ // TODO: handle exception
+ e.printStackTrace();
+ }
+
+ break;
+ case DownloadManager.STATUS_FAILED:
+ // ReDownland
+ dm.remove(prefs.getLong(DL_ID, 0));
+ prefs.edit().clear().commit();
+ break;
+ }
+ }
+ }
+
View
54 Android/touch.html
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN"
+ "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
+<html xml:lang='en' xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/1999/xhtml'>
+<head><meta content='application/xhtml+xml;charset=utf-8' http-equiv='Content-type' /><title></title></head>
+<body>
+<pre><code>public class MainActivity extends Activity implements OnTouchListener{
+
+ StringBuilder builder = new StringBuilder();
+ TextView textView;
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ //this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ textView = new TextView(this);
+ textView.setText(&quot;Touch and drag (one finger only)!&quot;);
+ textView.setOnTouchListener(this);
+ setContentView(textView);
+ //setContentView(R.layout.activity_main);
+ }
+
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.activity_main, menu);
+ return true;
+ }
+
+
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ builder.setLength(0);
+ switch (event.getAction()) { case MotionEvent.ACTION_DOWN:
+ builder.append(&quot;down, &quot;);
+ break;
+ case MotionEvent.ACTION_MOVE:
+ builder.append(&quot;move, &quot;);
+ break;
+ case MotionEvent.ACTION_CANCEL:
+ builder.append(&quot;cancle, &quot;);
+ break;
+ case MotionEvent.ACTION_UP:
+ builder.append(&quot;up, &quot;);
+ break; }
+ builder.append(event.getX()); builder.append(&quot;, &quot;);
+ builder.append(event.getY()); String text = builder.toString();
+ Log.d(&quot;TouchTest&quot;, text);
+ textView.setText(text);
+ return true;
+ }
+}</code></pre>
+</body></html>
View
46 Android/touch.md
@@ -0,0 +1,46 @@
+ public class MainActivity extends Activity implements OnTouchListener{
+
+ StringBuilder builder = new StringBuilder();
+ TextView textView;
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ //this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ textView = new TextView(this);
+ textView.setText("Touch and drag (one finger only)!");
+ textView.setOnTouchListener(this);
+ setContentView(textView);
+ //setContentView(R.layout.activity_main);
+ }
+
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.activity_main, menu);
+ return true;
+ }
+
+
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ builder.setLength(0);
+ switch (event.getAction()) { case MotionEvent.ACTION_DOWN:
+ builder.append("down, ");
+ break;
+ case MotionEvent.ACTION_MOVE:
+ builder.append("move, ");
+ break;
+ case MotionEvent.ACTION_CANCEL:
+ builder.append("cancle, ");
+ break;
+ case MotionEvent.ACTION_UP:
+ builder.append("up, ");
+ break; }
+ builder.append(event.getX()); builder.append(", ");
+ builder.append(event.getY()); String text = builder.toString();
+ Log.d("TouchTest", text);
+ textView.setText(text);
+ return true;
+ }
+ }
View
56 cocoa-for-mac-os-note.md
@@ -0,0 +1,56 @@
+
+
+
+很欢乐的一本书。开头是A Litter History, 先扯点Apple的八卦
+
+ Once upon a time, two guys namedSteve started a company called Apple Computer in their garage. The company grew rapidly,so they hired an experienced executive named John Sculley to be its CEO. After a fewconflicts, John Sculley moved Steve Jobs to a position where he had no control over thecompany at all.
+
+
+还有一小节How To Learn教你如何学习,首要的是保持每天10小时睡眠...
+
+ The first trick to maintaining focus is to get enough sleep: ten hours of sleep each night whileyou are studying new ideas. Before dismissing this idea, try it. You will wake up refreshedand ready to learn. Caffeine is not a substitute for sleep.
+
+
+翻译质量吐槽
+
+P83
+
+Now use the Assistant Editor to create an outlet called tableView on SpeakLineAppDelegate and connect it to the table view.
+
+现在使用Assistant Editor 创建 SpeakLineAppDelegate 的outlet为tabview。
+
+这是机器翻译的吗…中英文语序不一样的好不好,还好网上有英文原版的PDF比对。否则这种一步步跟着做的技术书,下一步都不知道干什么好了。
+
+个人认为这样翻译更好:
+
+现在使用Assistant Editor 在SpeakLineAppDelegate 里创建一个叫tabview的outlet。
+
+P86
+
+ You are writing the code that will change the selection from one row to another.
+
+正在编写一行代码,实现用户从表格视图的一行更改为选择另一行
+
+个人还想不出很好的翻译。
+
+P89
+
+由于KVC方法只能处理对象使得代码有点长
+
+What makes the method so long-winded is that the key-value coding methods work with objects
+
+P93
+
+There are two other solutions that would work. First, you could use key-value coding:
+
+P105
+
+To remove a key equivalent, click the X button at the right-hand side of the text field.
+
+翻译是:单击文本框右边的X按钮,删除key equivalent
+
+明明是要想删除key equivalent才点击的好不好!!!
+
+ 代码….
+
+Or you could use the accessor method to change fido:
View
2  fav/1.md
@@ -0,0 +1,2 @@
+拿起键盘是程序员,拿起画笔是绘画师,拿起吉他是摇滚青年,拿起锅铲是21世纪好男人~
+
View
5 game.md
@@ -0,0 +1,5 @@
+
+- http://gamedev.stackexchange.com
+- http://gamedev.stackexchange.com/questions/9292/where-to-start-with-game-development
+- http://mobile.tutsplus.com/tutorials/iphone/learn-ios-game-development-by-example-10-projects-to-get-you-started/
+- http://www.gamedev.net/page/index.html
View
8 ios/ios_dev.md
@@ -1,6 +1,6 @@
## Way
-开发iOS程序的途径
+The Way to Start iOS Development
* PhoneGap(Use HTML+CSS+JavaScript)
* Native App (Objective-C)
@@ -14,10 +14,14 @@
* Apple Dev Guide & Document
+## Objective-C
+* http://www.otierney.net/objective-c.html
+* http://cocoadevcentral.com/d/learn_objectivec/
+* [The Objective-C Programming Language](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html)
## Totur
* 求教iOS开发知识 http://segmentfault.com/q/1010000000095589
-*
+* http://appdevmanual.com/2010/05/starting-out/
View
5 ios/memory.md
@@ -35,4 +35,7 @@ http://www.cocoachina.com/bbs/read.php?tid=1848
retain的情况:NSString *newPt = [pt retain];
此时newPt的地址不再为0Xaaaa,可能为0Xaabb 但是内容依然为0X1111。 因此newPt 和 pt 都可以管理"abc"所在的内存。因此 retainCount需要增加1
copy的情况:NSString *newPt = [pt copy];
- 此时会在堆上重新开辟一段内存存放@"abc" 比如0X1122 内容为@"abc 同时会在栈上为newPt分配空间 比如地址:0Xaacc 内容为0X1122 因此retainCount增加1供newPt来管理0X1122这段内存
+ 此时会在堆上重新开辟一段内存存放@"abc" 比如0X1122 内容为@"abc 同时会在栈上为newPt分配空间 比如地址:0Xaacc 内容为0X1122 因此retainCount增加1供newPt来管理0X1122这段内存
+
+
+http://interfacelab.com/objective-c-memory-management-for-lazy-people/
View
6 linux.md
@@ -1,3 +1,9 @@
+鸟哥的Linux私房菜
+
+Ubunut中文论坛
+
+
+
alias
View
89 post/learn-c.md
@@ -0,0 +1,89 @@
+
+
+## 为什么会有这篇文章
+
+- 因为身边很多同学,包括同班的专业是计算机科学与技术的同学,和一些高中学习工科的同学,在学习C语言的时候碰到很多困惑。
+- 我因为高中参加信息学竞赛,以及自己对编程的学习,有一定的基础,有能力能帮同学解答一些很基础的问题
+- 正好有高中同学对我说看不懂C语言的书,我就顺便整理一些个人的看法写在这里。事实上有很多非常好的C语言书籍,以及关于如何学习C语言的文章。但是我还没有发现可以直接给同学看的
+
+## 谁应该看这篇文章
+如果你有以下困惑,那么这篇文章就是写给你的
+
+感觉C语言很难,课本看不懂
+写几行几十行的小程序经常碰到一些莫名奇妙的错误
+不知道编程为何物或者刚接触编程,但是因为课程安排,必须要学习C语言
+
+## 这篇文章的风格
+我没有太多时间,也没有足够的水平来写方方面面的东西,只是很简单的讲述一些常见问题。但是我会在结尾给出一些其他关于学习C语言的文章的链接,那些文章比我讲得好。
+
+## 什么是编程语言
+
+我们有自己的语言,计算机也有计算机的语言,要想让计算机懂我们的命令,我们必须用计算机能懂的方式来告诉计算机做什么。计算机能懂的语言,就是编程语言。
+
+## 什么是C语言
+很早以前,贝尔发明了电话。这小子办了美国电话电报公司(AT&T),大赚了一笔。
+
+AT&T有个贝尔实验室,里面有两个很牛的老头,觉得当时的编程语言和操作系统不爽,于是搞出了C语言和Unix操作系统。
+
+ 八卦
+
+ 没听说过Unix系统?举点熟悉的例子。Unix是一个很优秀的操作系统。衍生出一个版本,是由加州大学伯克利分校维护,叫BSD,苹果公司在这基础上捣鼓捣鼓,搞出了现在苹果电脑上的操作系统Mac OS X,以及现在大街上随处可见的iPhone的操作系统。
+
+ 1990年,芬兰的一个大学生,Linus重写了Unix系统,叫Linux系统,谷歌在这上面捣鼓捣鼓,折腾出了Android,也就是很多手机上的安卓系统。
+
+
+## 如何用C语言写程序
+用记事本这类能打字的东西,将程序写好,保存,然后用一种叫做编译器的东西,将它翻译成计算机能懂的语言。
+
+有点抽象?其实,就是你在一个地方用C语言这个东西打一些字,然后再点下鼠标什么的,程序就能运行了。
+
+
+## 什么是VC
+VC可以理解为维生素C,不过在编程中,一般指微软的Visual C++这个写程序的工具。
+
+中国的大学,很多都是拿VC当做标准的教学软件的。而且很多用的是,1998年发布的VC 6.0版本。
+
+这个工具严重过时,而且是商业软件,个人不认同它作为学习编程的工具。当然也足够学习了,只不过用起来不方便。
+
+
+如果学校教你用Turbo C,那是八十年代的东西,我就不说什么了。。。
+
+## 如何学习C语言
+很简单。
+
+- 看好书。不要怀疑你自己,你看不懂C语言是因为你的课本写的太差了,或者是你的老师太差了,扔掉吧,找本靠谱的书,和靠谱的老师。
+
+- 书籍推荐:C语言有很多好书。但是对于非计算机专业,真的很难推荐……因为我不知道你们学好C语言,目的如果只是考试,花很多时间在上面真的有点不值得。我看到了的话会写出来的。
+
+- 多练习编程。或许你现在还不能熟练打字,但是,多练习,每个例子都敲过去,就能熟练了。
+
+- 一定要学会使用两个网站:谷歌和维基百科,不会的上网查。这两个网站结果质量比百度和百度百科高多了。
+
+
+## 推荐工具
+
+Code::blocks
+Visual Studio 2010 Express版  这也是微软的东西,不过是比较新的版本,Express版本是免费的,功能少,不过足够学习。
+
+
+## 喜欢编程,另外一种语言
+
+C语言有很多优点。但是,刚开始学习,你会被少打一个分号之类的问题导致程序不能运行。
+
+如果对编程有兴趣,可以尝试Python语言。用C,写一个最简单的程序,输出Hello,World,是这样的
+
+ #include<stdio.h>
+ int main()
+ {
+ printf("Hello, World\n");
+ return 0;
+ }
+
+而Python是这样的
+
+ print "Hello, World"
+
+你喜欢那种呢?
+
+虽然中国基本没什么大学会教Python,但是,MIT,麻省理工,世界第一的理工科学校的计算机学院,是拿Python当入门语言的。
+
View
68 post/learn-cs.md
@@ -0,0 +1,68 @@
+
+
+本文分享自己对于计算机科学与技术学习的一点心得,写给那些计算机或者相关专业的同学,对课程设置感到迷茫的同学们。
+
+
+## 我们专业是什么
+
+以下内容摘自南京邮电大学招生网 http://zs.njupt.edu.cn/s/72/t/158/a/19331/info.jspy
+
+ 计算机科学与技术专业
+ (本科、四年制)
+ 本专业培养具有良好的科学素养和创新能力,系统地掌握计算机科学与技术,包括计算机软件、硬件、计算机通信与应用的基本理论、方法与技能,能从事计算机科学研究和应用或软硬件开发和技术管理的高级专业技术人才。
+ 本专业学生主要学习计算机科学与技术方面的基本理论和基础知识,接受从事研究计算机理论与应用计算机技术的基本训练,具有研究和开发计算机系统的基本能力。本专业的学生按照教学计划修满所规定的学分后,符合南京邮电大学全日制本科毕业学士学位授予条件的将被授予工学学士学位。
+ 主要课程有:高级语言程序设计、电工电子技术基础、数字电路与逻辑设计、离散数学、数据结构、操作系统、计算机组成原理、软件工程、微型计算机接口技术、计算机系统结构、数据库系统、编译原理、通信原理、计算机通信与网络、TCP/IP网络设计与实现、现代通信技术、计算机网络编程技术、算法分析与设计、嵌入式系统开发、网络信息安全等。
+ 本专业继续深造的方向有计算机应用技术、计算机软件与理论、通信与信息系统等。
+ 本专业学生毕业后,可在政府机关、科研部门、企事业单位和高等院校,特别是信息技术领域从事计算机软件、计算机应用、计算机
+ 通信和网络等方面的研究、设计、开发和技术管理等工作。
+
+
+如果不想看这种书面表达很规范但是,不知道到底在讲什么的东西的话,可以看看我的解释。
+
+我们的专业就是学习计算机,学习计算机到底是怎么工作的,如何用计算机做出那些很漂亮的软件,如何让计算机更好的工作。
+
+因为我们学校是通信强校,所以可能会加一两门通信相关的课。
+
+## 我们专业学什么
+
+## 我们专业毕业干什么
+
+软件行业,和金融行业其实是应届生工资发的最高的行业,不过烂大街的学生比例也更多。
+
+- 百度、腾讯等大的互联网公司
+
+一般就是写程序的,或者其他相关的行业。
+
+具体的去看招聘网站,每个大网站底下有加入我们,还有大街网这些招聘网站。或者问你身边很熟悉的从事相关工作的人。一定要是很熟悉的并且亲自经历的!因为很多东西,比如你从学长学姐听来的,或者是我胡说八道讲的,传来传去就变味了,你听到只是故事的一面,别人背后真正的故事你却不知道。
+
+
+## 吐槽大学体系
+
+总的来说,一大堆数学课,加上物理、电子相关的课程,一些编程相关的课,还有一些理论课,加上大家都学的英语体育,还有乱七八糟的马克思之类的课程,
+
+我们的课程安排非常不合理!!!
+
+我们的课程其实都是很有用的。比如说,数学,是分析解决的问题的工具,对以后一些数据挖掘、人工智能、算法、计算机图形学等方向都很有帮助。
+
+但是,我们学校上来就给你上一大堆数学课,先打击你对数学的兴趣。教材完全是一坨屎!!!完全是一群懂数学的人自己讲自己的东西,仍给你一大堆定理、定义、证明、习题。这种教材,只会打击你的兴趣。
+
+老师上课,不好多说,反正我想他们的课程不会让你增加对数学的喜爱吧。
+
+
+
+
+ 现在大学里安排的课程体系最大的缺点就是根本不考虑优化。每个过来人都会有这样的感觉:大一大二学了好多数学课,却不知道都是干什么用的,为什么要学。连它有什么用都不知道怎么能有兴趣学好呢?然后到大三大四学专业课时,用到以前的知识了,才发现以前学的数学是多么有用,然而早就忘得一干二净了,考完试都还给老师了,回头重新学吧,这时候才发现很多东西以前根本没学明白,现在才真的学明白了,那么前两年的时间岂不是都浪费了?大学里的课程体系还有一个缺点就是不灵活,每门课必须占一个学期,必须由一个老师教,不同课程的老师之间没有任何沟通和衔接,其实这些课程之间是相互依赖的,把它们强行拆开是不符合人的认知规律的。比如我刚上大学的时候,大一上半学期就被逼着学C语言,其实C语言是一门很难的编程语言,不懂编译原理、操作系统和计算机体系结构根本不可能学明白,那半个学期自然就浪费掉了。当时几乎所有学校的计算机相关专业都是这样,大一上来就学C语言,有的学校更疯狂,上来就学C++,导致大多数学生都以为自己会C语言,但其实都是半吊子水平,到真正写代码的时候经常为一个Bug搞得焦头烂额,却没有机会再系统地学一遍C语言,因为在学校看来,C语言课早在大一就给你“上完了”,就像一顿饭已经吃完了,不管你吃饱没吃饱,不会再让你重吃一遍了。
+
+
+
+
+## 学什么
+
+### 英语
+
+### 读好书
+
+### 上好网站
+
+### 大量的编程
+
View
61 post/the_newbie's_guide_to_the_internet.md
@@ -0,0 +1,61 @@
+# The Newbie's Guide to the Internet
+
+## 写在最前面: 学会使用Google和维基百科
+
+### 谷歌
+
+搜索引擎是上网必备,用谷歌不用百度的理由:请使用谷歌搜索这个答案
+
+但是也不知道为什么,使用谷歌搜索一些词汇,会出现无法显示该页的,比如搜索“他腿【毛】好长啊”,“小白兔喜不喜欢吃【胡】萝卜”,“如何学【习】C语言”,会出现无法显示该页的。为什么呢?我不知道…不许联想!!!
+
+待补充
+
+### 维基百科
+不知道有多少人对维基百科的印象还停留在维基揭秘事件。那个维基揭秘只是用维基百科的开源架构做的一个网站而已。
+
+维基百科是一个在线的百科全书。
+
+维基百科是世界前五大网站之一,也是这五个网站中唯一一个公益网站。维基没有广告。维基百科靠捐助维护。相比Facebook,Google几千人的工程师团队,维基专职维护人员只有几十个人,但却有无数的人为其贡献内容。
+
+维基的内容质量之高可以让很多国内编垃圾教科书的机构倒闭一万次!
+
+关于维基的具体介绍,请使用维基百科查阅相关条目。
+
+不要提百度百科,内容质量没法和维基比,很多都是复制粘贴,格式很乱。(不过什么明星八卦之类的确实比维基多~)
+
+
+
+## 国内网站推荐
+
+### 杂谈
+
+### 豆瓣
+
+豆瓣不仅仅是文艺青年的聚集地,豆瓣的价值在于原创的高质量的内容。
+
+
+### 知乎
+
+### 学习类
+
+### 垂直领域
+
+## 国外网站推荐
+
+### 为什么上国外网站
+### StackExchange
+### Quora
+### 新闻
+### Crousera
+### Open Course
+### Ted
+
+
+
+# 写给程序员
+
+## 技术谬论
+
+## 三大网站
+## *inx
+##
View
1  start/linux.md
@@ -0,0 +1 @@
+http://www.linuxcast.net
View
5 suisuinian/1.md
@@ -0,0 +1,5 @@
+世界上最遥远的距离,在于MIT20年前的CS入门教材是SCIP,而我们学校的C语言课本的代码排版不是等宽字体…
+
+hackernews,github,StackOverFlow,学计算机的必看的网站
+
+
View
39 todo.md
@@ -0,0 +1,39 @@
+
+##Programming
+
+### Android
+
+*
+
+### iOS
+
+* https://developer.apple.com
+*
+
+### Web
+
+
+HTML,XML,CSS,JavaScript,PHP,MySQL,Wordpress,LAMP
+
+
+### GNU/Linux
+
+* GNU core utility
+
+C->System Programming
+Algorithm,ACM/ICPC
+
+### Programming Language
+
+* SCIP
+* Haskell, Common Lisp, Scala
+
+### Computer Tools
+
+### Computer Science
+
+LaTex,Office,PS
+Assembly language,Computer System
+EE,Mathematics
+OS,Compilers
+Others
View
45 tumblr/11-23-my-computer-study-experience.md
@@ -0,0 +1,45 @@
+
+
+
+
+My First Programing Language is Pascal. I start programing for the purpose of join the NOIp, a algorithm contest for middle school students in China, and for my interseting of explore the world of computer programming.
+
+I even don't hava my own computer at that time. I have contest class one night a week at the school's computer room.I just write some simple code to solve some sample algorithm problem, using some simple algorithm just like quick sort.
+
+
+After servrel months, I realize I should learn something by myself.I buy CLRS, the textbook of MIT, one of the best university of the world, which is also a top school in the world in Computer Science Filed.
+
+I learn a lot from CLRS, and meanwhile I read some other good books and do a lot of algorithms problems. I start visit some English Website such as USACO, and do some ACM/ICPC's Online Judge's problem. I learn C at that time, for reading other's code writing in C/C++.
+
+I didn't got a good prize in the contest, But I learn a lot.I have a strong programming and algorithm foundation, and have ability of study computer technolegy by myself.
+
+
+In China there is a Exam called the College Entrance Examination. So most students in China just do lots of practise in Grade 12. I stop programming at Nov.2011.
+
+After the Examation, I back to my computer. I change my computer and start using Linux(My old laptop's hardware isn't support Linux). I learn a litte Python, the I switch to Ruby.I have interset in web development. So I learn some about it.Like Django, web.py, Ruby on Rails, Sinatra, HTML, CSS, etc.But I don't keep on studying them.(I am so lazy~)
+
+I also interest in mobile development. In my University I join a Mobile Application Development Club. I start learning Java, and start making simple Android Application. And then I buy a Macbook Air, start learning Objective-C, and iOS Programming.
+
+Some times I feel I'm away from Computer Science now. I just use the API of the SDK. I don't think some problem, just search the probleam in the Internet.I can write longer code than before.But it's logic is so simple.
+
+And I thinks I learn to much aspects. I learn Web, Android, iOS, my time is separated. I know a litte in everything, but I don't have a ablity to do some awesome application.
+
+
+I have a lot to learn. I shouldn't waste to much time.
+
+
+TODO
+
+- Learn more about Android, and take aim at iOS after I successsful join iOS development program
+- Learn computer utility,programming language and theory, build some useful program, and start own open source project
+
+
+And I will explore the world, to open my eyes, and find other interesting things, and do I should, and want to do.
+
+
+
+
+
+
+
+
Please sign in to comment.
Something went wrong with that request. Please try again.