package com.wistron.StereoUI;
import android.content.Context;
import android.graphics.Rect;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.widget.AbsoluteLayout;
import android.widget.Button;
/**
* Copyright(c)2011 Wistron SWPC ALL rights reserved.
* created: 2011-09-01
* filename:CSButton.java
* @author :WH1107028
* purpose:立体控件CSButton的封装
*
*/
@SuppressWarnings("deprecation")
public class CSButton extends CSView{
protected Button[] m_buttons = null;
public CSButton(Context context) {
super(context);
m_context = context;
m_buttons = new Button[2];
for (int i = 0; i < m_buttons.length; i++) {
m_buttons[i] = new Button(context);
}
}
/**
* 設置控件的可见性
*
* @param visibility
*/
@Override
public void setVisibility(int visibility) {
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].setVisibility(visibility);
m_buttons[1].setVisibility(visibility);
}
/**
* 設置控件的可用性
* @param enabled
*/
@Override
public void setEnable(boolean enabled) {
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].setEnabled(enabled);
m_buttons[1].setEnabled(enabled);
}
/**
* 設置控件為3D模式
*/
@Override
public void setDimension(boolean is3d) {
super.setDimension(is3d);
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
if(m_buttons[0].getLayoutParams() != null && m_buttons[1].getLayoutParams() != null){
if(m_cur_width == WRAP_CONTENT || m_cur_height == WRAP_CONTENT){
m_buttons[0].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_lx, m_cur_ly));
m_buttons[1].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_rx, m_cur_ry));
}else{
m_buttons[0].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_lx, m_cur_ly));
m_buttons[1].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_rx, m_cur_ry));
}
m_buttons[0].requestLayout();
m_buttons[1].requestLayout();
}
}
/**
* 設置控件的位置
*/
@Override
public void setLocation(int x, int y) {
super.setLocation(x, y);
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
if(m_buttons[0].getLayoutParams() != null && m_buttons[1].getLayoutParams() != null){
if(m_cur_width == WRAP_CONTENT || m_cur_height == WRAP_CONTENT){
m_buttons[0].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_lx, m_cur_ly));
m_buttons[1].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_rx, m_cur_ry));
}else{
m_buttons[0].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_lx, m_cur_ly));
m_buttons[1].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_rx, m_cur_ry));
}
m_buttons[0].requestLayout();
m_buttons[1].requestLayout();
}
}
@Deprecated
@Override
public void setLocation(int x, int y, int screenWidth, int screenHeight) {
super.setLocation(x, y, screenWidth, screenHeight);
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
if(m_buttons[0].getLayoutParams() != null && m_buttons[1].getLayoutParams() != null){
m_buttons[0].requestLayout();
m_buttons[1].requestLayout();
}
}
/**
* 設置控件背景
* @param enabled
*/
public void setBackground(int resid){
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].setBackgroundResource(resid);
m_buttons[1].setBackgroundResource(resid);
}
/**
* 設置控件背景
* @param enabled
*/
public void setBackground(int residL, int residR){
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].setBackgroundResource(residL);
m_buttons[1].setBackgroundResource(residR);
}
/**
* 设置控件文本
* @param text CharSequence
*/
public void setText(CharSequence text) {
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].setText(text);
m_buttons[1].setText(text);
}
/**
* 设置控件文本
* @param text int
*/
public void setText(int resid) {
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].setText(resid);
m_buttons[1].setText(resid);
}
/**
* Set the default text size to the given value, interpreted as "scaled pixel" units. This size is adjusted based on the current density and user font size preference.
* @param size
*/
public void setTextSize(float size){
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].setTextSize(size);
m_buttons[1].setTextSize(size);
}
/**
* Sets the text color for all the states (normal, selected, focused) to be this color.
* @param color
*/
public void setTextColor(int color) {
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].setTextColor(color);
m_buttons[1].setTextColor(color);
}
/**
* Sets the extent by which text should be stretched horizontally.
* @param size
*/
public void setTextScaleX(float size){
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].setTextScaleX(size);
m_buttons[1].setTextScaleX(size);
}
/**
* 設置onClick事件監聽
* @param l
* @return
*/
public void setOnClickListener(OnClickListener l) {
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].setOnClickListener(l);
}
/**
* 设置控件的ID
* @param id
*/
public void setId(int id) {
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].setId(id);
}
public void setGravity(int gravity){
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].setGravity(gravity);
m_buttons[1].setGravity(gravity);
}
/**
* 设置按钮中的文字和按钮的边距
* @param left
* @param top
* @param right
* @param bottom
*/
@Override
public void setPadding(int left,int top,int right,int bottom){
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
super.setPadding(left, top, right, bottom);
m_buttons[0].setPadding(m_pad_lleft, m_pad_ltop, m_pad_lright, m_pad_lbottom);
m_buttons[1].setPadding(m_pad_rleft, m_pad_rtop, m_pad_rright, m_pad_rbottom);
}
/**
* setLayoutParams
* @param lParams left
* @param rParams right
*/
public void setLayoutParams(LayoutParams lParams, LayoutParams rParams){
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].setLayoutParams(lParams);
m_buttons[1].setLayoutParams(rParams);
}
/**
* 获取控件的可见性
* @return
*/
public int getVisibility(){
int visile = -1;
if(m_buttons[0] == null || m_buttons[1] == null){
visile = -1;
}
visile = m_buttons[0].getVisibility();
return visile;
}
/**
* 取得控件的id
* @return if values is -1, then cannot get id, otherwise success
*/
public int getId(){
if(m_buttons[0] == null || m_buttons[1] == null){
return View.NO_ID;
}
return m_buttons[0].getId();
}
/**
* 获取子元素
* @param which 0 = 获取左屏元素,1 = 获取右屏元素
* @return 当没有找到控件或错误时,返回null
*/
public Button getChild(int which){
Button res = null;
switch (which) {
case 0:
if(m_buttons[0] != null){
res = m_buttons[0];
}
break;
case 1:
if(m_buttons[1] != null){
res = m_buttons[1];
}
break;
}
return res;
}
/**
* 判断按钮是否被按下
* @return
*/
public boolean isPressed() {
boolean state = false;
if(m_buttons[0] == null || m_buttons[1] == null){
return false;
}
state |= m_buttons[0].isPressed();
state |= m_buttons[1].isPressed();
return state;
}
/**
* Start the specified animation now.
* @param anim the animation to start now
*/
public void startAnimation(Animation anim) {
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].startAnimation(anim);
m_buttons[1].startAnimation(anim);
}
/**
* Start the specified animation now.
* @param anim the animation to start now
*/
public void startAnimation(Animation animL, Animation animR) {
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].startAnimation(animL);
m_buttons[1].startAnimation(animR);
}
/**
* Call this view's OnClickListener, if it is defined.
* @return True there was an assigned OnClickListener that was called, false otherwise is returned.
*/
public boolean performClick(){
boolean state = false;
if(m_buttons[0] == null || m_buttons[1] == null){
return false;
}
state |= m_buttons[0].performClick();
return state;
}
protected void computeDimension(boolean is3D){
super.setDimension(is3D);
}
public void requestLayout(){
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
m_buttons[0].requestLayout();
m_buttons[1].requestLayout();
}
/**
* 觸摸事件
* @param event
* @return
*/
@Override
public boolean touchEvent(final MotionEvent ev) {
boolean state = false;
MotionEvent event = MotionEvent.obtain(ev);
Rect lRect = new Rect();
Rect rRect = new Rect();
int [] location0 = new int[2];
int [] location1 = new int[2];
if(m_buttons[0] == null || m_buttons[1] == null){
return state;
}
m_buttons[0].getGlobalVisibleRect(lRect);
m_buttons[1].getGlobalVisibleRect(rRect);
m_buttons[0].getLocationOnScreen(location0);
m_buttons[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_buttons[0].getWidth() >= event.getRawX()/2 - m_offset
&& location0[1] <= event.getRawY()
&& location0[1] + m_buttons[0].getHeight() >= event.getRawY())
||
(location1[0] <= event.getRawX()/2 + m_offset
&& location1[0] + m_buttons[1].getWidth() >= event.getRawX()/2 + m_offset
&& location1[1] <= event.getRawY()
&& location1[1] + m_buttons[1].getHeight() >= event.getRawY())
)
{
if(event.getAction() != MotionEvent.ACTION_MOVE)
{
state |= m_buttons[0].onTouchEvent(event);
state |= m_buttons[1].onTouchEvent(event);
}
}else{
if(event.getAction() == MotionEvent.ACTION_UP){
//m_buttons[0].onTouchEvent(event);
//m_buttons[1].onTouchEvent(event);
if(m_buttons[0].isPressed()){
m_buttons[0].setPressed(false);
m_buttons[1].setPressed(false);
state |= true;
}
}
}
}else{
//Under 2D mode
if(
location0[0] <= event.getRawX()
&& location0[0] + m_buttons[0].getWidth() >= event.getRawX()
&& location0[1] <= event.getRawY()
&& location0[1] + m_buttons[0].getHeight() >= event.getRawY())
{
if(event.getAction() != MotionEvent.ACTION_MOVE)
{
state |= m_buttons[0].onTouchEvent(event);
state |= m_buttons[1].onTouchEvent(event);
}
}else{
if(event.getAction() == MotionEvent.ACTION_UP){
//m_buttons[0].onTouchEvent(event);
//m_buttons[1].onTouchEvent(event);
m_buttons[0].setPressed(false);
m_buttons[1].setPressed(false);
state |= true;
}
}
}
return state;
}
/**
* 把本Group添加至指定的ViewGroup
* @param layout
* @return
*/
public void addToLayout(ViewGroup alayout) {
float scaleRate = 1f;
if(m_buttons[0] == null || m_buttons[1] == null){
return;
}
if(alayout == null){
return;
}
scaleRate = m_scale_rate_w < m_scale_rate_h ? m_scale_rate_w : m_scale_rate_h;
m_buttons[0].setTextSize(m_buttons[0].getTextSize() * scaleRate);
m_buttons[1].setTextSize(m_buttons[1].getTextSize() * scaleRate);
if(m_is_3D){
m_buttons[0].setTextScaleX(0.5f);
m_buttons[1].setTextScaleX(0.5f);
}else{
m_buttons[0].setTextScaleX(1f);
m_buttons[1].setTextScaleX(1f);
}
if(m_cur_width == WRAP_CONTENT || m_cur_height == WRAP_CONTENT){
m_buttons[0].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_lx, m_cur_ly));
m_buttons[1].setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, m_cur_rx, m_cur_ry));
}else{
m_buttons[0].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_lx, m_cur_ly));
m_buttons[1].setLayoutParams(new AbsoluteLayout.LayoutParams(m_cur_width, m_cur_height, m_cur_rx, m_cur_ry));
}
alayout.addView(m_buttons[0]);
alayout.addView(m_buttons[1]);
}
/**
* 保存立體控件的狀態
*/
@Override
public Object save() {
// TODO Auto-generated method stub
return null;
}
/**
* 讀取立體控件的狀態
*/
@Override
public void restore(Object object) {
// TODO Auto-generated method stub
}
}