自定義button常按監聽

import android.content.Context;
import android.os.AsyncTask;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.Button;

public class LongTouchBtn extends Button {
    private boolean clickdown = false;
    private LongTouchListener mListener;
    private int mtime;

    public LongTouchBtn(Context context) {
        super(context);
    }

    public LongTouchBtn(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public LongTouchBtn(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            clickdown = true;
            new LongTouchTask().execute();
            Log.i("huahua", "按下");
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            clickdown = false;
            Log.i("huahua", "彈起");
        }
        return super.onTouchEvent(event);
    }

    private void sleep(int time) {
        try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    class LongTouchTask extends AsyncTask<Void, Integer, Void> {

        @Override
        protected Void doInBackground(Void... params) {
            while (clickdown) {
                sleep(mtime);
                publishProgress(0);
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {

        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            mListener.onLongTouch();
        }
    }

    public void setOnLongTouchListener(LongTouchListener listener, int time) {
        mListener = listener;
        mtime = time;

    }

    public interface LongTouchListener {
        void onLongTouch();
    }
}
activity_main.xml
<com.baway.LongTouchBtn
    android:id="@+id/tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="點擊" />
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private LongTouchBtn tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (LongTouchBtn) findViewById(R.id.tv);
        tv.setOnLongTouchListener(new LongTouchBtn.LongTouchListener() {

            @Override
            public void onLongTouch() {
                Toast.makeText(MainActivity.this, "正在長按", Toast.LENGTH_SHORT).show();
                Log.i("huahua", "正在長按");
            }
        }, 1000);

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章