2011年5月25日 星期三

建立一個可以滑動的多圖片Gallary

1.目標:建立一個很多圖串起來能夠滑動的物件
2.xml:裡面要擺一個gallary物件,並且在drawable資料夾裡放入想擺的圖片
3.實作:
public class checkmain extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.checkmain);
//取得GALLARY物件
((Gallery) findViewById(R.id.photogallary)).setAdapter(new ImageAdapter2(this));
}

class ImageAdapter2 extends BaseAdapter
{ 
/* 類別成員 myContext為Context父類別 */ 
private Context myContext; 

/*使用R.drawable裡的圖片作為圖庫來源,型態為整數陣列*/
private int[] myImageIds =
{ 
//photoxx是圖片檔名,跟擺在drawable資料夾裡的一樣
R.drawable.photo1,
R.drawable.photo2,
R.drawable.photo3, 
R.drawable.photo4,
R.drawable.photo5,
}; 
/* 建構子只有一個參數,即要儲存的Context */ 
public ImageAdapter2(Context c) { this.myContext = c; } 

/* 回傳所有已定義的圖片總數量 */ 
public int getCount() { return this.myImageIds.length; } 

/* 利用getItem方法,取得目前容器中影像的陣列ID */ 
public Object getItem(int position) { return position; } 
public long getItemId(int position) { return position; }

/* 取得目前欲顯示的影像View,傳入陣列ID值使之讀取與成像 */ 
public View getView(int position, View convertView, ViewGroup parent)
{ 
/* 建立一個ImageView物件 */
ImageView i = new ImageView(this.myContext);

i.setImageResource(this.myImageIds[position]);
i.setScaleType(ImageView.ScaleType.FIT_XY); 

/* 設定這個ImageView物件的寬高,單位為dip */ 
i.setLayoutParams(new Gallery.LayoutParams(120, 120)); 
return i; 
} 

/*依據距離中央的位移量 利用getScale回傳views的大小(0.0f to 1.0f)*/
public float getScale(boolean focused, int offset)
{ 
/* Formula: 1 / (2 ^ offset) */ 
return Math.max(0,1.0f/(float)Math.pow(2,Math.abs(offset)));
} 
}
}

建立menu按鈕

1.目標:建立按下menu後下方浮出的按鈕列
2.xml:隨便一個
3.實作:

 public boolean onCreateOptionsMenu(Menu menu)
    //在啟動時建立menu選項

    {
      menu.add(0, 0, 0,"新增");
      //加入menu選項

      menu.add(0, 1, 1,"離開");
      return super.onCreateOptionsMenu(menu);
    }
    //當選項被選的時候的事件
    public boolean onOptionsItemSelected(MenuItem item)
    {
      super.onOptionsItemSelected(item);
      //switch case判斷點的是哪個鈕

      switch(item.getItemId())
      {
        case 0:
          Intent intent3 = new Intent(studenteditlist.this,studentadd.class);
         startActivity(intent3);
        break;
        case 1:
          finish();
          break;
      }
      return true;
    }

2011年5月17日 星期二

取得系統日期

1.目標:印出系統目前的年月日
2.XML設計:
   (1)1個XML:main.xml裡有1個textview:dateTextView
3.實作:
public class main extends Activity {
 /*宣告三個日期變數,用來抓年月日*/
 private int mYear;
 private int mMonth;
 private int mDay;
/*宣告物件變數tv,在程式碼裡指定tv到textview用的*/
 TextView tv;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
     /*取得日期*/
     Calendar c=Calendar.getInstance();//建立抓日期物件c
     mYear=c.get(Calendar.YEAR);//年
     mMonth=c.get(Calendar.MONTH);//月
     mDay=c.get(Calendar.DAY_OF_MONTH);//日
     
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);//設定載入的xml
      
        tv= (TextView) findViewById(R.id.dateTextView);
        /*指定tv到xml中的textview元件*/
        
        updateDisplay();
        //呼叫自定方法,用來把日期丟到textview裡面
    } 


private void updateDisplay()
{//設定tv的字,用append()方法加入字串,數字用自定方法轉成二個字元
 tv.setText(
 new StringBuilder().append(mYear).append("年")
        .append(format(mMonth + 1)).append("月")
        .append(format(mDay)).append("日")
   ); 
}

//自定方法,如果只有一位數的時候就加入一個0
private String format(int i) {
 String s=" "+i;
 if(s.length()==1) s="0"+s;
 return s;
}
}

2011年5月16日 星期一

切換Activity

1.目標:按下按鈕後切換到另一個Activity
2.XML設計:
    (1)a.xml裡有按鈕b1,
    (2)b.xml裡有按鈕b2,
3.實作:
a.xml
public class a extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.a);//載入a.xml
        
        Button b1 = (Button) findViewById(R.id.button1);//宣告按鈕b1
        b1.setOnClickListener(new Button.OnClickListener()//於b1設定點擊監聽
        {
          public void onClick(View v)//設定click事件
          {
            Intent intent1 = new Intent(a.this,b.class);
            //透過intent呼叫b
           startActivity(intent1);//執行activity
          }
        });
     }
}
b.xml
public class b extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.b);//載入b.xml
       
        Button b2 = (Button) findViewById(R.id.button2);//宣告按鈕b2
        b2.setOnClickListener(new Button.OnClickListener()//於b2設定點擊監聽
        {
          public void onClick(View v)//設定click事件
          {
           finish();//關閉此activity
          //因為呼叫activity算是開啟一個form,若在此也使用呼叫activity來切回去的話,會變成現存兩個a的狀況,所以只用finish結束掉就好了。
          //當然若a那邊也設定執行b後finish就沒有這個問題。
          }
        });
    }    
}

至於建立新的activity時,一定要在AndroidManifest.xml內加上
<activity android:name=".(Activity的名字)"></activity>
讓系統啟動時認識到有這個activity存在,才能正常執行。