這周主要是練習了一個小程序,目的是熟悉一下這段日子以來學習的一些控件,讓控件和布局看起來更協調,即使旋轉手機也不會太影響畫面的整體效果。更加深了對控件和布局的使用熟練程度?;仡欉@一個月來學習的知識以及遇到的問題,覺得在Calendar這個小程序時印象特別深刻。
做這個小程序的時候遇到的比較大的難題就是那個自定義的適配器。代碼如下:
class CalendarAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private Context mContext = null;
privateintx;
privateinty;
privateinthour;
public CalendarAdapter(Context context) {
mContext = context;
/* LayoutInflater的作用和findViewById()差不*多, 不同之處在于LayoutInflater是找layout文件夾下 *的某個xml布局文件!而findViewById()是找某一個xml
*下的具體 widget控件。
*/
mInflater = LayoutInflater.from(mContext);
}
// 得到一個Item
public Object getItem(int arg0) {
returnitems.get(arg0);
}
// 得到一個Item的id
publiclong getItemId(int position) {
return position;
}
// 返回Items的總數
publicint getCount() {
returnitems.size();
}
// 由position得到所對應的Item的View,從而進行操作。返回一個convertView,
// BaseAdapter類封裝的有方法讓Items的所有項都執行此操作
public View getView(int position, View convertView,
android.view.ViewGroup parent) {
final TextView indexText;
// if (convertView == null) {此處出現異常?。?!
convertView = mInflater.inflate(R.layout.time02, null);
// }
convertView.setBackgroundColor(Color.WHITE);
indexText = (TextView) convertView.findViewById(R.id.time);
LinearLayout listItem = (LinearLayout) convertView
.findViewById(R.id.listitem);
// 設置item中的indexText的文本
indexText.setText(items.get(position).toString());
indexText.setTextColor(Color.GRAY);
// 獲取當前時間
Time t = new Time();
t.setToNow();
hour = t.hour;
int minute = t.minute;
// Log.v("time",hour + "");
if (position < hour) {
convertView.setBackgroundColor(Color.LTGRAY);
}
if (position == hour) {
x = convertView.getWidth();
// 把convertView分成60等份
y = convertView.getHeight() * minute / 60;
/* Log.v("minute", minute + "");
* Log.v("width", x + "");
*Log.v("height",convertView.getHeight()
* + "");
* Log.v("Rectheight", y + "")
*/
/*MyView mv = newMyView();實例化MyView對象后,會自動調用onDraw方法
mv.onDraw(canvas);
setContentView(mv);*/
//此時convertView里面已經沒有TextView了,所以要用canvas.drawText()設置文本
LinearLayout layout = new LinearLayout(mContext);
layout.addView(new MyView(mContext));
return layout;
}
return convertView;
}
這樣的話在ListView 的當前時間欄中的畫布已經占滿了整個手機屏幕,不打算找一些方法設置一下畫布的大小,后來找到了這個方法onMeasure。
在MyView中要添加另一個方法:
protectedvoidonMeasure(int widthMeasureSpec, int heightMeasureSpec){
setMeasuredDimension(1500, 60);
}
在網上查了一些資料,給出了一些解釋:
1.onMeasure的兩個參數用于測量水平和垂直空間大小,具體怎么測量,不得而知
2.onMeasure被調用時用來決定當前view以及所有它的子view的尺寸請求
畫面終于恢復了正常,Ok!一切搞定!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。