国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 自定義按鈕點擊事件和長按事件對比

2019-12-12 02:59:19
字體:
來源:轉載
供稿:網友

 Android 自定義按鈕點擊事件和長按事件對比

一個按鈕同時實現點擊和長按事件,有時候會有沖突,我們針對這一現象來自定義按鈕來區分點擊和長按事件

1.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:tools="http://schemas.android.com/tools"   android:layout_width="match_parent"   android:layout_height="match_parent"   tools:context="com.example.adfaf.MainActivity"   android:orientation="vertical"    >    <huahua.btnlongtouch.LongTouchBtn      android:id="@+id/btn2"      android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:text="自定義Btn" />        <TextView       android:id="@+id/tv1"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:text="0"       />       <SeekBar        android:id="@+id/seekbar"       android:layout_width="match_parent"       android:layout_height="wrap_content"       android:max="100"              />      </LinearLayout> 

2.MainActivity中

public class MainActivity extends Activity {     private TextView Tv1;      private LongTouchBtn Btn1;      private int num=0;     private SeekBar sbar;      @Override      protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        sbar= (SeekBar) findViewById(R.id.seekbar);       Tv1 = (TextView)findViewById(R.id.tv1);        Btn1 = (LongTouchBtn)findViewById(R.id.btn2);        Btn1.setOnClickListener(new View.OnClickListener() {                    @Override          public void onClick(View arg0) {            Log.i("huahua", "自定義按鈕處理單擊");                      }        });        Btn1.setOnLongClickListener(new View.OnLongClickListener() {                    @Override          public boolean onLongClick(View v) {            Log.i("huahua", "自定義按鈕處理長按一次相應");            return true;          }        });                /**         * 這是一個自定義的接口 專門負責處理長按邏輯         *  @param listener         *      監聽器。         * @param time         *      第2個參數傳入1000 ,表示1秒處理一次onLongTouch()方法         */        Btn1.setOnLongTouchListener(new LongTouchListener() {                    @Override          public void onLongTouch() {            num++;            int seekbar_progress = sbar.getProgress();           Log.i("huahua", "seekbar_progress="+seekbar_progress);            seekbar_progress++;           sbar.setProgress(seekbar_progress);           Tv1.setText(num+"");            Log.i("huahua", "正在長按");                      }        },1000);      }  } 

3.新建一個自定義的LongTouchBtn類

public class LongTouchBtn extends Button{       /**     * 記錄當前自定義Btn是否按下     */    private boolean clickdown = false;        /**     * 下拉刷新的回調接口     */    private LongTouchListener mListener;        /**     * 按鈕長按時 間隔多少毫秒來處理 回調方法     */    private int mtime;        /**     * 構造函數     * @param context     * @param attrs     */    public LongTouchBtn(Context context, AttributeSet attrs) {      super(context, attrs);      // TODO Auto-generated constructor stub    }      /**     * 處理touch事件     */    @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);    }      /**     * 使當前線程睡眠指定的毫秒數。     *     * @param time     *      指定當前線程睡眠多久,以毫秒為單位     */    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();      }          }        /**     * 給長按btn控件注冊一個監聽器。     *     * @param listener     *      監聽器的實現。     * @param time     *      多少毫秒時間間隔 來處理一次回調方法     */    public void setOnLongTouchListener(LongTouchListener listener, int time) {      mListener = listener;      mtime = time;          }        /**     * 長按監聽接口,使用按鈕長按的地方應該注冊此監聽器來獲取回調。     */    public interface LongTouchListener {        /**       * 處理長按的回調方法       */      void onLongTouch();    }  }  

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海淀区| 屏东市| 武冈市| 沙洋县| 青铜峡市| 阜平县| 林芝县| 无棣县| 合水县| 巢湖市| 仁寿县| 建阳市| 庐江县| 呼和浩特市| 壶关县| 岱山县| 尼玛县| 陇南市| 武义县| 花莲县| 阜阳市| 庆阳市| 太白县| 邯郸县| 大英县| 揭阳市| 莱芜市| 石景山区| 咸阳市| 花莲县| 凉城县| 四会市| 湖北省| 临城县| 萨嘎县| 金塔县| 南川市| 祁东县| 霍山县| 西林县| 城固县|