package com.wistron.StereoUI; import android.content.Context; import android.graphics.drawable.BitmapDrawable; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup; import android.widget.AbsoluteLayout; import android.widget.CheckBox; import android.widget.CompoundButton.OnCheckedChangeListener; /** * Copyright(c)2011 Wistron SWPC ALL rights reserved. * @created: 2011-09-02 * @filename:CSCheckBox.java * @author :Wangwei * @purpose:立体控件CheckBox封裝類 * */ @SuppressWarnings("deprecation") public class CSCheckBox extends CSView{ protected CheckBox[] m_checkboxs = null; //初始化CSCheckBox public CSCheckBox(Context context) { super(context); m_context = context; m_checkboxs = new CheckBox[2]; for (int i = 0; i < m_checkboxs.length; i++) { m_checkboxs[i] = new CheckBox(context); } } /** * 設置控件是否可見 * @param visibility */ @Override public void setVisibility(int visibility) { if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } m_checkboxs[0].setVisibility(visibility); m_checkboxs[1].setVisibility(visibility); } /** * 設置控件是否可用 * @param enabled */ @Override public void setEnable(boolean enabled) { if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } m_checkboxs[0].setEnabled(enabled); m_checkboxs[1].setEnabled(enabled); } @SuppressWarnings("deprecation") @Override public void setDimension(boolean is3d) { super.setDimension(is3d); if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } if(m_is_3D){ m_checkboxs[0].setTextScaleX(0.5f); m_checkboxs[1].setTextScaleX(0.5f); }else{ m_checkboxs[0].setTextScaleX(1f); m_checkboxs[1].setTextScaleX(1f); } if(m_checkboxs[0].getLayoutParams() != null && m_checkboxs[1].getLayoutParams() != null){ if(m_cur_width == WRAP_CONTENT || m_cur_height == WRAP_CONTENT){ m_checkboxs[0].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_lx, m_cur_ly)); m_checkboxs[1].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_rx, m_cur_ry)); }else{ m_checkboxs[0].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_lx, m_cur_ly)); m_checkboxs[1].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_rx, m_cur_ry)); } m_checkboxs[0].requestLayout(); m_checkboxs[1].requestLayout(); } } @SuppressWarnings("deprecation") @Override public void setLocation(int x, int y) { super.setLocation(x, y); if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } if(m_checkboxs[0].getLayoutParams() != null && m_checkboxs[1].getLayoutParams() != null){ if(m_cur_width == WRAP_CONTENT || m_cur_height == WRAP_CONTENT){ m_checkboxs[0].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_lx, m_cur_ly)); m_checkboxs[1].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_rx, m_cur_ry)); }else{ m_checkboxs[0].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_lx, m_cur_ly)); m_checkboxs[1].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_rx, m_cur_ry)); } m_checkboxs[0].requestLayout(); m_checkboxs[1].requestLayout(); } } /** * 判斷控件是否被選中 */ public boolean isChecked(){ if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return false; } if(m_checkboxs[0].isChecked() && m_checkboxs[1].isChecked()){ return true; }else{ return false; } } /** * 設置控件被選中 * @param checked */ public void setChecked(boolean checked){ if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } m_checkboxs[0].setChecked(checked); m_checkboxs[1].setChecked(checked); } /** * 設置控件的點擊事件 * @param l */ public void setOnClickListener(OnClickListener l) { if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } m_checkboxs[0].setOnClickListener(l); m_checkboxs[1].setOnClickListener(l); } /** * 設置控件的文字 * @param text */ public void setText(CharSequence text){ if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } m_checkboxs[0].setText(text); m_checkboxs[1].setText(text); } /** * Sets the text color for all the states (normal, selected, focused) to be this color. * @param color */ public void setTextColor(int color) { if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } m_checkboxs[0].setTextColor(color); m_checkboxs[1].setTextColor(color); } /** * 設置控件的圖像顯示 * @param resid */ public void setBackgroundResource(int resid) { if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } m_checkboxs[0].setBackgroundResource(resid); m_checkboxs[1].setBackgroundResource(resid); m_checkboxs[0].setButtonDrawable(new BitmapDrawable()); m_checkboxs[1].setButtonDrawable(new BitmapDrawable()); } /** * 設置控件的圖像顯示 * @param resid */ public void setBackgroundResource(int residL, int residR) { if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } m_checkboxs[0].setBackgroundResource(residL); m_checkboxs[1].setBackgroundResource(residR); m_checkboxs[0].setButtonDrawable(new BitmapDrawable()); m_checkboxs[1].setButtonDrawable(new BitmapDrawable()); } /** * 設置OnCheckChange監聽事件 * @param l */ public void setOnCheckedChangeListener(OnCheckedChangeListener l){ if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } m_checkboxs[0].setOnCheckedChangeListener(l); } public void setLayoutParams(LayoutParams lParams, LayoutParams rParams){ if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } m_checkboxs[0].setLayoutParams(lParams); m_checkboxs[1].setLayoutParams(rParams); } /** * 获取控件的可见性 * @return */ public int getVisibility(){ int visile = View.NO_ID; if(m_checkboxs[0] == null || m_checkboxs[1] == null){ visile = View.NO_ID; } visile = m_checkboxs[0].getVisibility(); return visile; } /** * 設置控件的觸摸事件 * @param event */ @Override public boolean touchEvent(MotionEvent event) { boolean state = false; int [] location0 = new int[2]; int [] location1 = new int[2]; if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return state; } m_checkboxs[0].getLocationOnScreen(location0); m_checkboxs[1].getLocationOnScreen(location1); //若控件隐藏,则不响应点击事件 if(getVisibility()==View.INVISIBLE || getVisibility()==View.GONE){ return false; } if(m_is_3D){ //Under 3D mode if( (location0[0] <= event.getRawX()/2 - m_offset && location0[0] + m_checkboxs[0].getWidth() >= event.getRawX()/2 - m_offset && location0[1] <= event.getRawY() && location0[1] + m_checkboxs[0].getHeight() >= event.getRawY()) || (location1[0] <= event.getRawX()/2 + m_offset && location1[0] + m_checkboxs[1].getWidth() >= event.getRawX()/2 + m_offset && location1[1] <= event.getRawY() && location1[1] + m_checkboxs[1].getHeight() >= event.getRawY())) { if(event.getAction() != MotionEvent.ACTION_MOVE) { state |= m_checkboxs[0].onTouchEvent(event); state |= m_checkboxs[1].onTouchEvent(event); } }else{ if(event.getAction() == MotionEvent.ACTION_UP) { // m_checkboxs[0].onTouchEvent(event); // m_checkboxs[1].onTouchEvent(event); m_checkboxs[0].setPressed(false); m_checkboxs[1].setPressed(false); state |= true; } } }else{ //Under 2D mode if( location0[0] <= event.getRawX() && location0[0] + m_checkboxs[0].getWidth() >= event.getRawX() && location0[1] <= event.getRawY() && location0[1] + m_checkboxs[0].getHeight() >= event.getRawY() ) { if(event.getAction() != MotionEvent.ACTION_MOVE) { state |= m_checkboxs[0].onTouchEvent(event); state |= m_checkboxs[1].onTouchEvent(event); } }else{ if(event.getAction() == MotionEvent.ACTION_UP) { // m_checkboxs[0].onTouchEvent(event); // m_checkboxs[1].onTouchEvent(event); m_checkboxs[0].setPressed(false); m_checkboxs[1].setPressed(false); state |= true; } } } return state; } /** *設置控件的位置并將控件添加到ViewGroup中去 */ @SuppressWarnings("deprecation") @Override public void addToLayout(ViewGroup layout) { float scaleRate = 1f; if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } if(layout == null){ return; } scaleRate = m_scale_rate_w < m_scale_rate_h ? m_scale_rate_w : m_scale_rate_h; m_checkboxs[0].setTextSize(m_checkboxs[0].getTextSize() * scaleRate); m_checkboxs[1].setTextSize(m_checkboxs[1].getTextSize() * scaleRate); if(m_is_3D){ m_checkboxs[0].setTextScaleX(0.5f); m_checkboxs[1].setTextScaleX(0.5f); }else{ m_checkboxs[0].setTextScaleX(1f); m_checkboxs[1].setTextScaleX(1f); } if(m_cur_width == WRAP_CONTENT || m_cur_height == WRAP_CONTENT){ m_checkboxs[0].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_lx, m_cur_ly)); m_checkboxs[1].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_rx, m_cur_ry)); }else{ m_checkboxs[0].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_lx, m_cur_ly)); m_checkboxs[1].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_rx, m_cur_ry)); } layout.addView(m_checkboxs[0]); layout.addView(m_checkboxs[1]); } /** * 設置控件上字體的大小 * @param x */ public void setTextScaleX(float x) { if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } m_checkboxs[0].setTextScaleX(x); m_checkboxs[1].setTextScaleX(x); } /** * 设置控件的ID * @param id */ public void setId(int id) { if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } m_checkboxs[0].setId(id); } /** * 设置控件内部的内容与控件的边距 */ @Override public void setPadding(int left, int top, int right, int bottom) { if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } m_checkboxs[0].setPadding(left, top, right, bottom); m_checkboxs[1].setPadding(left, top, right, bottom); } public void setGravity(int gravity){ if(m_checkboxs[0] == null || m_checkboxs[1] == null){ return; } m_checkboxs[0].setGravity(gravity); m_checkboxs[1].setGravity(gravity); } @Override public Object save() { // TODO Auto-generated method stub return null; } @Override public void restore(Object object) { // TODO Auto-generated method stub } }