2012年3月9日 星期五

Android-TQC106畫廊展示

import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.content.res.TypedArray;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class GDD01 extends Activity 
{
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    Gallery g =(Gallery)findViewById(R.id.mygallery);
    g.setAdapter(new ImageAdapter(this));
    g.setOnItemClickListener(new Gallery.OnItemClickListener(){

  @Override
  public void onItemClick(AdapterView arg0, View arg1, int arg2,
    long arg3) {
   // TODO Auto-generated method stub
   Toast.makeText(arg1.getContext(), getString(R.string.my_gallery_text_pre)
     +arg2+getString(R.string.my_gallery_text_post), 
     Toast.LENGTH_SHORT).show();
   
  }
     
    });
   
  }
   
      

  public class ImageAdapter extends BaseAdapter 
  {
   int BackGround;
   Context m_context;
   Integer[]imageId={ R.drawable.png001,R.drawable.png002,
                R.drawable.png003,R.drawable.png004,
                R.drawable.png005,R.drawable.png006,
                R.drawable.png007,R.drawable.png008,
                R.drawable.png009,R.drawable.png010,
                R.drawable.png011
                      };
   
    
    //建構子只有一個參數,即要儲存的Context
   public ImageAdapter(Context c) 
     {
    super();
    m_context=c;
    TypedArray array=m_context.obtainStyledAttributes(R.styleable.Gallery);
    BackGround=array.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0);
    
     }
     
    
    //回傳所有已定義的圖片總數量
    public int getCount() 
    {
     return imageId.length;
    }
    
    
    public Object getItem(int position) 
    {
      return position;
    }
    
    //取得圖片編號
    public long getItemId(int position) 
    {
      return position;
    }


 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
  // TODO Auto-generated method stub
  ImageView i = new ImageView(m_context);
  i.setImageResource(imageId[position]);
  i.setLayoutParams(new Gallery.LayoutParams(236, 188));
  i.setScaleType(ImageView.ScaleType.FIT_XY);
  i.setBackgroundResource(BackGround);
  return i;
 }
    
  
  }
   
    
    //使用android.R.drawable裡的圖片當成圖庫來源
}

Android-TQC104計算BMI值

主要運用到下列觀念
(1)intent運作
(2)bundle運用
(3)2個activity傳值


main.java
package COM.TQC.GDD01;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;

public class GDD01 extends Activity 
{
  private EditText etheight;
  private EditText etweight;
  private RadioButton rb1;
  private RadioButton rb2;
    
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    
    setContentView(R.layout.main);
    
    
    Button b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new Button.OnClickListener()
    {
      public void onClick(View v)
      {
      
        //從輸入介面中取出了的身高、體重值,要將身高、體重值傳送給 child_Activity 後作計算
       etheight=(EditText)findViewById(R.id.input_height);
       etweight=(EditText)findViewById(R.id.input_weight);
       
       double height=Double.parseDouble(etheight.getText().toString());
       double weight=Double.parseDouble(etweight.getText().toString());
       
       String Sex="";
       
       rb1=(RadioButton)findViewById(R.id.input_m); //男性按鈕
       rb2=(RadioButton)findViewById(R.id.input_w); //女性按鈕
       
       if(rb1.isChecked())
       {
        Sex="M";
       }
       else
       {
        Sex="W";
       }
       
        //這些附加在 Intent 上的訊息都儲存在 Bundle 物件中
          Intent intent = new Intent();
          intent.setClass(GDD01.this, GDD01_child.class);
          
     //透過「intent.putExtras(bundle)」敘述,將「bundle」 物件附加在 Intent 上,隨著 Intent 送出而送出
          Bundle bundle=new Bundle();
          bundle.putDouble("height", height); //38行的值
          bundle.putDouble("weight", weight); //39行的值
          bundle.putString("Sex", Sex);
          
          intent.putExtras(bundle); //查看GDD01_child.java,26行程式,用extras。
          startActivityForResult(intent,0);
       
       
       
      }
    });
  }
  
  
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data)
  {
    switch (resultCode)
    { 
      case RESULT_OK:
    
        Bundle bundle = data.getExtras();
        String Sex = bundle.getString("Sex");
        double height = bundle.getDouble("height");
        double weight = bundle.getDouble("weight");
        
        etheight.setText("" + height);
        etweight.setText("" + weight);
        if(Sex.equals("M"))
        {
          rb1.setChecked(true);
        }else
        {
          rb2.setChecked(true);
        }
        break;       
      default: 
        break; 
     } 
   } 
}


second.java
package COM.TQC.GDD01 ;

import java.text.DecimalFormat;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class GDD01_child extends Activity 
{
  Bundle bundle;
  Intent intent;
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    
    
    setContentView(R.layout.mylayout);
    
    
    intent=this.getIntent();
    bundle = intent.getExtras();
    
   
    String Sex = bundle.getString("Sex");
    double height = bundle.getDouble("height");
    double weight = bundle.getDouble("weight");
      
    
    String BMI_result = this.getBMI(height,weight);
    String BMI_advice = this.getAdvice(Sex,height,weight);
    
    TextView tvBMI=(TextView) findViewById(R.id.tvBMI);
    tvBMI.setText(BMI_result);
    TextView tvAdvice=(TextView) findViewById(R.id.tvAdvice);
    tvAdvice.setText(BMI_advice);
    
  
    Button b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new Button.OnClickListener()
    {
      public void onClick(View v)
      {          
      
       GDD01_child.this.setResult(RESULT_OK, intent);
       
      
       GDD01_child.this.finish();
      }
    });
  }
  
 //BMI值格式化
  private String format(double num)
  {
      DecimalFormat nf = new DecimalFormat("0.00");//呈現至小數點第二位
      String s=nf.format(num);
      
      return s;
      
  }
  //取得BMI值
  private String getBMI (double height, double weight)
  {
   double BMI_values=weight/(height*height);
   return getString(R.string.report_result)+format(BMI_values);
   
  }
  //依BMI值取得建議
  private String getAdvice (String Sex, double height, double weight)
  {
  double BMI_MAX;
  double BMI_MIN;
  double BMI=weight/(height*height);

  if(Sex.equals("M"))
  {
   BMI_MAX=25.0;
   BMI_MIN=20.0;
  }
  else
  {
   BMI_MAX=22.0;
   BMI_MIN=18.0;
  }
if (BMI> BMI_MAX)
  {
   return getString(R.string.advice_heavy);//體重過重
  }
  else if (BMI< BMI_MIN)
  {
   return getString(R.string.advice_light);//體重過輕
  }
  else
  {
  return getString(R.string.advice_average);//體重適中
  }

  }

}


二個activity設定 從「AndroidManifest.xml」中application新增

2012年3月5日 星期一

Android-TQC102電費計算機

課程學習筆記

關於spinner運用

程式碼參考如下

package COM.TQC.GDD01;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class GDD01 extends Activity
{
 protected TextView MyOutcome;
 protected int volt;
 protected int inputv = 110;
 
     
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        spinner();
        button();
        
    }
 
 
 private void spinner() {
  // TODO Auto-generated method stub
  
  Spinner Sp=(Spinner)findViewById(R.id.input_v);
  Sp.setOnItemSelectedListener(new
   Spinner.OnItemSelectedListener()
  {

   @Override
   public void onItemSelected(AdapterView arg0, View arg1,
     int arg2, long arg3) {
    // TODO Auto-generated method stub
    volt=arg0.getSelectedItemPosition();
    
    if(volt ==0) 
    {
     inputv=110;
    }
    else
    {
     inputv=220;
    }
   }

   @Override
   public void onNothingSelected(AdapterView arg0) {
    // TODO Auto-generated method stub
    
   }
   
  });
  
 }

 private void button() {
  // TODO Auto-generated method stub
  Button btn=(Button)findViewById(R.id.submit);
  btn.setOnClickListener(new Button.OnClickListener()
  {

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    EditText fill_a=(EditText)findViewById(R.id.input_a);
    EditText fill_hr=(EditText)findViewById(R.id.input_hr);
    EditText fill_m=(EditText)findViewById(R.id.input_m);
    
    double inputa=Double.parseDouble(fill_a.getText().toString());
    double inputhr=Double.parseDouble(fill_hr.getText().toString());
    double inputm=Double.parseDouble(fill_m.getText().toString());
    
    double total_w= inputv * inputa;
    
    int total_m=(int) Math.round((total_w/1000)*(inputhr*30)*inputm);
    
    MyOutcome=(TextView)findViewById(R.id.respond);
    MyOutcome.setText("$"+total_m);
   }
   
  });
 }
}


2012年3月3日 星期六

blogger嵌入程式碼以SyntaxHighlighter

當撰寫程式碼要分享的時候,如果單純只是貼在blog上,有可能會造成格式亂碼

或是斷行不乾淨的問題,加上增加容易閱讀性,所以在blog中好的程式碼編排是相當重要的。

因此,耗費一個早上來摸一下,加上對css並不是很熟悉,爬了一下文,做了n次實驗後

把相關的經驗分享給大家。

step1
至「SyntaxHighlighter」網頁,它提供一個

可以將程式碼嵌在blog的技術,樣式也相當美觀

step2
至「SyntaxHighlighter hosting」網頁,提供主要是從官方位址上引用程式碼格式,相關css語法都用好了,省去自已上傳至網路空間的步驟。

step3
複製程式碼如下:

















資料來源:http://king971119.blogspot.com/2010/05/syntaxhighlighter-bloggerjavascript.html

step4
開啟google blogger,「設計」>「修改html」


至(/b:template-skin)和(/head)間貼入step3複製的檔案 or(head)和(/head)之間,我本身是用前者,因為放在前比較容易查,若中間隨便放,反而不容易後續維護

step5
若要寫不同格式的程式碼,則要以不同的「檔案格式」下去寫
參考點我

程式碼寫在這


step6

完成

step7
相關資料如下
http://alexgorbatchev.com/SyntaxHighlighter/
http://sharedderrick.blogspot.com/2007/12/blogger-syntaxhighlighter.html
http://king971119.blogspot.com/2010/05/syntaxhighlighter-bloggerjavascript.html

2012年3月2日 星期五

雲端運算概念

由於本有在研究opensource search engine相關,找到一些關於雲端概念的軟體

可籍由實作方式更加了解,何謂雲端?


相關資料來源:資策會(http://www.iiiedu.org.tw/ites/CBD.htm)