Android無侵入解決ボタンを繰り返しクリック---DoubleClick 2.0の使用

4151 ワード

Androidボタンの繰り返しクリック処理.Android hookはカスタムClickListenerを挿入し、侵入は全くなかった.
githubアドレス:https://github.com/liys666666/DoubleClick
DoubleClick---3.0バージョンDoubleClick---2.0バージョンDoubleClick---1.0バージョン
紹介する
1.0バージョンを見たことがない場合は、まず背景紹介を見てみましょう.
一.きほんしよう
①フレームワークの導入
//      ,build.gradle
allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }  //  
        }
    }
//app   build.gradle
dependencies {
    implementation 'com.github.liys666666:DoubleClick:V2.0.6'  //  
}

②カスタムアプリケーションを初期化すればよい
public class AppApplication extends Application{

    @Override
    public void onCreate() {
        super.onCreate();

//        ViewDoubleHelper.init(this); //    :1 
        ViewDoubleHelper.init(this, 500); //       (  :  )
    }
}

他の機能が不要であれば、ここで解決する.(バージョン1.0と同じ)
二.特殊要求処理------1.0バージョンとは異なります
  • あるActivityで重複クリックイベントを処理する必要がなければ、どうしますか?
  • 一部のボタンだけが重複クリックを処理する必要がありますが、どうすればいいですか?方法は以下の通りである:1.インタフェースを定義します2.UnifiedDoubleClickで定義する方法、方法名は随意で、注釈で解決する.3.注記の意味@ACancelActivity:繰り返しクリックするActivityを処理する必要はありません@AAddDoubleClick:DoubleClickを単独で扱うコントロール(複数のActivityがある場合は複数のメソッドを定義するだけでよい)activity:viewが存在するActicity addIds:Viewのid times:Click最小間隔時間.times=0の場合、Viewは重複するクリックイベントを処理する必要がない.
  • //          
    ViewDoubleHelper.init(this, 1000, UnifiedDoubleClick.class); //       (  :  )
    
    //   (   AnnotationClass   )
    //ViewDoubleHelper.addAnnotationClass(UnifiedDoubleClick.class);
    
    public interface UnifiedDoubleClick{
          //          Activity.
        @ACancelActivity(activitys = { 
                MainActivity.class,
                MainActivity2.class,
        })
       void cancelActivity();
    
        //    DoubleClick View
        @AAddDoubleClick(activity = MainActivity.class,
                addIds = {R.id.btn1, R.id.btn2},
                times = {0, 2000})
        void mainActivity();
    
        @AAddDoubleClick(activity = MainActivity2.class,
                addIds = {R.id.btn, R.id.btn2},
                times = {2000, 2000})
        void mainActivity2();
    }
    

    三.カスタムClickListenerを挿入(よく使用)----1.0バージョンとは異なります
    一般的なシーン:ログインするかどうかを判断します.1つのアプリに複数の場所がクリックされる場合は、ログインするかどうかを判断する必要があります.この場合、if判断を多くの場所で書く必要があります.このフレームワークを使用すると、元のページでログインするかどうかを判断する必要がなく、正常な論理を書くことができます.もちろん、AOPでもこの効果が得られますが、AOP環境を導入しなければなりません.AOPのいくつかの注釈の使用を学ばなければなりません.私はやはり面倒だと思います.
    使用方法:例1として登録するか否かを判断する.クラスを定義し、BaseClickListenerを継承
    public class LoginClickListener extends BaseClickListener{
    
        public static boolean isLogin = false; //      
    
        @Override
        public boolean isNext(View v) {
            //       (onClick   )
    
            return isLogin;  //true    onClick,  false    
        }
    
        @Override
        public void after(View view) {
            //onClick    
        }
    
    }
    

    ②.@AClickListener activity:viewが存在するActicity listener:挿入されたカスタムClickListener ids:Viewのidを使用
    public interface UnifiedDoubleClick{
          //....
        @AClickListener(activity = MainActivity2.class,
                lisenner = LoginClickListener.class,
                ids = {R.id.btn, R.id.btn2})
        void interceptMain2(); //     
    
    //        : 
    ViewDoubleHelper.init(this, 1000, UnifiedDoubleClick.class); //       (  :  )
    

    効果:MainActivity 2で、btnとbtn 2をクリックすると、すでにログインしている場合は、それらのonClickメソッドを実行します.そうでない場合は、実行しません.
    以上より、
    1.基礎運用のみであれば、直接1行のコードで解決する.
    //        ViewDoubleHelper.init(this); //    :1 
            ViewDoubleHelper.init(this, 500); //       (  :  )
    

    2.特別な必要がある場合は、カスタムUnifiedDoubleClickを使用して注釈を組み合わせ、初期化すると次のようになります.
    ViewDoubleHelper.init(this, 1000, UnifiedDoubleClick.class); //       (  :  )
    
  • @ACancelActivity:重複クリック処理不要Activity.
  • @AAddDoubleClick:DoubleClickを個別に処理するコントロール(複数のActivityが使用されている場合は、複数のメソッドを定義するだけでよい)
  • @AClickListener:カスタムClickListenerを挿入(複数のActivityが使用されている場合は、複数のメソッドを定義するだけでよい)
  • 利点:どんな処理をしても、元のコードに全く侵入せず、勝手に削除して変更することができる.

  • ここまでで終わり、必要な人を助けてほしい、使いやすいと思ったら、starを歓迎します.
    技術が限られているので、フレームワークに何か問題があれば、コメントエリアのコメントをダウンロードしてください.