读书人

android 源码 翻阅

发布时间: 2012-06-27 14:20:08 作者: rapoo

android 源码 阅读
虽然android的源码也时不时的会去看,但大部分还是只能看懂部分。这里只把能完全看懂的源码上传了。

android.widget.AnalogClock
这个类比较简单,如果想要创建自己的View,可以从参考这个类开始。像TextView这种将近一万行的源码就太多了。还有一个比这个稍微难一点的是ImageView,也可以看那个类

/*** * 使用了这个类,RadioButton的OnCheckedChangeListener会被覆盖掉,所以 * 要使用监听器的话,使用这边的NonLayoutRadioGroup.OnCheckedChangeListener */public class NonLayoutRadioGroup {public interface OnCheckedChangeListener {/*** * @param group 触发该事件的NonLayoutRadioGroup * @param view 触发该事件的RadioButton, 当调用clearCheck时,view的值为null */public void onCheckedChanged(NonLayoutRadioGroup group, RadioButton view);}private List<RadioButton> mRadioButtons = new ArrayList<RadioButton>();private RadioButton mCheckButton;private OnCheckedChangeListener mListener;private CompoundButton.OnCheckedChangeListener mCheckedListener =new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if (!isChecked) {mCheckButton = null;return;}if (mCheckButton != null) {mCheckButton.setChecked(false);}setCheckedButton((RadioButton) buttonView);}};public void addRadioButton(RadioButton button) {// 不能添加null// 为没有id的RadioButton生成一个Idif (button.getId() == View.NO_ID) {button.setId(button.hashCode());}button.setOnCheckedChangeListener(null);if (button.isChecked()) {// 移除原来的if (mCheckButton != null) {mCheckButton.setChecked(false);}setCheckedButton(button);}button.setOnCheckedChangeListener(mCheckedListener);mRadioButtons.add(button);}public void removeRadioButton(RadioButton button) {// 添加到这里面的移除时,才需要清除其OnCheckedChangeListenerif (mRadioButtons.contains(button)) {button.setOnCheckedChangeListener(null);mRadioButtons.remove(button);}}public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {mListener = listener;}public void check(RadioButton button) {// check原来选中的if (button != null && mCheckButton == button) {return;}// 移除选中的if (mCheckButton != null) {mCheckButton.setChecked(false);}// 设置选中的if (button != null) {button.setChecked(true);}// 触发监听器setCheckedButton(button);}public void clearCheck() {check(null);}public RadioButton getCheckedRadioButton() {return mCheckButton;}// /////////////////////////////////////////////////*** * 设置选中的RadioButton */private void setCheckedButton(RadioButton button) {mCheckButton = button;if (mListener != null) {if (button != null) {mListener.onCheckedChanged(this, button);}else {mListener.onCheckedChanged(this, null);}}}}

读书人网 >Android

热点推荐