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);
}
}