[php] 在 Mac 用ATOM / Visual Studio Code 為 php debug

依php版本安裝 xdebug

1
brew install homebrew/php/phpXX-xdebug

在 /usr/local/etc/php/{x.y}/conf.d/ext-xdebug.ini) 內加上

1
2
3
4
5
6
7
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_connect_back=1 # Not safe for production servers
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=true

Read More >

[php] 實作callback

用名稱呼

function run1($callback)
{
 $callback('123');
}

function funA($val)
{
 echo 'funA:'.$val;
}

run1('by run1');//funA:by run1

用物件傳(推薦)
class ClassB
{
 public function funB($val){
  echo 'ClassB:funB:'.$val;
 }
}

function run2(ClassB $callable){
 $callable->funB('by run2');
}

run2(new ClassB());//ClassB:funB:by run2

[Android] setClickListener in custom view

直接設 setClickListener 沒反應
要加上

    private OnClickListener listener;

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_UP) {
            if(listener != null) listener.onClick(this);
        }
        return super.dispatchTouchEvent(event);
    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if(event.getAction() == KeyEvent.ACTION_UP && (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER || event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
            if(listener != null) listener.onClick(this);
        }
        return super.dispatchKeyEvent(event);
    }

    @Override
    public void setOnClickListener(OnClickListener listener) {
        this.listener = listener;
    }

[Android] 下拉更新 SwipeRefreshLayout

Layout Xml

                <android.support.v4.widget.SwipeRefreshLayout
                    android:id="@+id/laySwipe"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >

                        <ListView
                            ... />
                </android.support.v4.widget.SwipeRefreshLayout>

Java Code

OnRefreshListener onSwipeToRefresh = new OnRefreshListener() {
        @Override
        public void onRefresh() {
            laySwipe.setRefreshing(true);
            //dosomething
            laySwipe.setRefreshing(false);
        }
    };

((SwipeRefreshLayout)findViewById(R.id.laySwipe)).setOnRefreshListener(onSwipeToRefresh);

幫listview補上下面的code避免滑動衝突


    private OnScrollListener onListScroll = new OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {

        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
            if (firstVisibleItem == 0) {
                laySwipe.setEnabled(true);
            }else{
                laySwipe.setEnabled(false);
            }
        }
    };

[Unity] uGUI (4.6) EventSystem 事件系統 快速上手

4.6 新進的 EventSystem 事件系統 可以用在 UI 事件外也可以用在普通的 GameObject
終於不用自已打射線偵測點擊了

環境 4.6.0b17 因為才beta版所以變動的機率很大

  • 對 UI 偵聽事件:
    這邊先用 Image 試

    加入 UI - Image
    加入 Image 之後應該會自動建立一個 EventSystem ( 如果沒有自已加 )
    Image 之上的 Canvas 會自動掛 GraphicRaycaster
    Image 掛上 UI - Event Trigger
    寫個
    public void onClick(){ Debug.Log (name + " is Clicked!"); }
    掛在 Image 身上
    對 Event Trigger 按 Add New - PointerClick - 按右下的 +
    把自身從 Hierarchy 拖進 None(Object) 右邊指定剛寫的 Function
    try it !

  • 對場景上的 GameObject 偵聽事件:場景上加入 UI - EventSystem
    Main Camera 掛上 Physics Raycaster (或 Physics 2D Raycaster )
    被點的 GameObject 掛上 Box Collider (或 Box Collider 2D)
    被點的 GameObject 掛上 Event Trigger
    寫個
    public void onClick(){ Debug.Log (name + " is Clicked!"); }
    掛在 被點的 GameObject 身上
    對 Event Trigger 按 Add New - PointerClick - 按右下的 +
    把自身從 Hierarchy 拖進 None(Object) 右邊指定剛寫的 Function
    try it !

[Unity] uGUI (4.6) EventSystem 事件系統 快速上手

4.6 新進的 EventSystem 事件系統 可以用在 UI 事件外也可以用在普通的 GameObject
終於不用自已打射線偵測點擊了

環境 4.6.0b17 因為才beta版所以變動的機率很大

  • 對 UI 偵聽事件:
    這邊先用 Image 試

    加入 UI - Image
    加入 Image 之後應該會自動建立一個 EventSystem ( 如果沒有自已加 )
    Image 之上的 Canvas 會自動掛 GraphicRaycaster
    Image 掛上 UI - Event Trigger
    寫個
    public void onClick(){ Debug.Log (name + " is Clicked!"); }
    掛在 Image 身上
    對 Event Trigger 按 Add New - PointerClick - 按右下的 +
    把自身從 Hierarchy 拖進 None(Object) 右邊指定剛寫的 Function
    try it !

  • 對場景上的 GameObject 偵聽事件:場景上加入 UI - EventSystem
    Main Camera 掛上 Physics Raycaster (或 Physics 2D Raycaster )
    被點的 GameObject 掛上 Box Collider (或 Box Collider 2D)
    被點的 GameObject 掛上 Event Trigger
    寫個
    public void onClick(){ Debug.Log (name + " is Clicked!"); }
    掛在 被點的 GameObject 身上
    對 Event Trigger 按 Add New - PointerClick - 按右下的 +
    把自身從 Hierarchy 拖進 None(Object) 右邊指定剛寫的 Function
    try it !