AndroidカスタムViewラーニング(一)----ビュークラスを作成する

4678 ワード

ビュークラスを作成
丹念に設計されたカスタムビューは、他の丹念に設計されたクラスとよく似ています.使いやすいインタフェースを使用して、CPUやメモリなどを効率的に使用できる特定の機能のセットをカプセル化しています.ただし、デザインの良いクラスとして、カスタムビューは次のとおりです.
  • Android規格
  • に準拠
  • Android XMLレイアウトに適したカスタムスタイル属性
  • を提供
  • バリアフリーイベント
  • を送信する.
  • は、複数のAndroidプラットフォームと互換性があります.

  • 1.サブビュー##
    Androidフレームワークで定義されているすべてのビュークラスがViewを拡張します.カスタムビューは、Viewを継承したり、既存のビューサブクラスの1つを拡張したりして、Buttonなどの時間を節約することもできます.
    Android Studioがビューと対話できるようにするには、パラメータContextオブジェクトとAttributeSetオブジェクトをパラメータとして使用するコンストラクション関数を少なくとも1つ指定する必要があります.このコンストラクション関数を使用すると、レイアウトエディタでビューのインスタンスを作成および編集できます.
    class PieChart extends View
     { 
     public PieChart (Context context ,AttributeSet attrs ){
      super (context ,attrs ); 
     } 
    }    
           
    

    2.カスタム属性の定義
    ビューでユーザーインタフェースに組み込みコンテンツを追加するには、XML要素で指定し、要素プロパティを使用して外観と動作を制御する必要があります.適切なカスタムビューを作成するには、XMLでスタイルを追加および設定することもできます.カスタムビューでこの動作を有効にするには、次の手順に従います.
  • リソース要素でビューのカスタム属性を定義する
  • XMLレイアウトで属性を指定する値
  • 実行時に属性値
  • を取得する.
  • 取得した属性値をビュー
  • に適用します.
    カスタムプロパティを定義するには、プロジェクトにリソースを追加します.これらのリソースをres/values/attrs.xmlファイルに配置することに慣れています.これはattrs.xmlファイルの例です.
    
      
      
      
     
      
      attr> 
      declare-styleable> 
      resources>
    

    このコードは、2つのカスタム属性、showTextおよびlabelPosition属性名の変更可能なエンティティPieChartを宣言します.変更できるエンティティの名前は、カスタムビューを定義するクラスの名前と同じです.この規則に従う必要は厳密ではありませんが、多くのポピュラーなコードエディタは、この命名規則に依存して文の完了を提供します.
    カスタム属性を定義すると、組み込み属性を使用するようにレイアウトXMLファイルで使用できます.唯一の違いは、androidオリジナルの宣言と異なるカスタム属性です.
    http://schemas.android.com/apk/res/android android          
    http://schemas.android.com/apk/res/[your package name]              
    
    

    完全なxmlコード
     
      
     LinearLayout>
    	
    

    長い名前空間URIの繰り返し使用を回避するために、例はxmlns命令を使用する.このコマンドは、名前空間に別名を割り当てるcustomhttp://schemas.android.com/apk/res/com.example.customviews.任意の名前空間の別名(上のコードで使用される別名はcustom)を選択できます.
    注意レイアウトのXMLタグの名前にカスタムビューを追加します.カスタムビュークラスの完全な限定名です.ビュークラスが内部クラスである場合は、さらにビュー外部クラスの名前で定義する必要があります.さらに.たとえば、PieChartクラスには内部クラスPieViewという名前があります.このクラスのカスタムプロパティを使用するには、ラベルcom.example.customviews.charting.PieChart.PieView(内部クラスの書き方)を使用します.
    カスタム属性を適用##
    XMLレイアウトからビューを作成すると、リソースバンドルからXMLタグのすべてのプロパティが読み込まれ、ビューのコンストラクション関数のAttributeSetにビューとして渡されます.値はAttributeSetで直接読み込むことができますが、いくつかの欠点があります.
  • 属性値のリソース参照未解析
  • スタイルは
  • には適用されません.
    上記の問題は、obtainStyledAttributes()メソッドによる処理で解決できます.
    逆に、AttributeSetはobtainStyledAttributes()に渡されます.このメソッドは、TypedArrayが参照とスタイル化を解除した値配列を返します.
    Androidリソースコンパイラは、呼び出し作業に多くの作業を行いました.obtainStyledAttributes()resディレクトリ内の各リソースについて、生成されたR.javaは、属性ID配列と定義配列内の各属性インデックスの定数のセットを定義します.定義済み定数を使用して、属性TypedArrayを読み込みます.次に、PieChartクラスのプロパティを読み込む方法を示します.
    public PieChart(Context context, AttributeSet attrs) {
       super(context, attrs);
       TypedArray a = context.getTheme().obtainStyledAttributes(
            attrs,
            R.styleable.PieChart,
            0, 0);
    
       try {
           mShowText = a.getBoolean(R.styleable.PieChart_showText, false);
           mTextPos = a.getInteger(R.styleable.PieChart_labelPosition, 0);
       } finally {
           a.recycle();
       }
    }
    

    TypedArrayオブジェクトは共有リソースであり、使用後は回収する必要があります.
    アトリビュートとイベントアトリビュートを追加することは、ビューの動作と外観を制御する有効な方法ですが、ビューを初期化するときにのみ読み取ります.動的動作を指定するには、カスタム属性ごとに属性getterとsetterのペアを公開します.次のコードクリップは、PieChartが属性showTextを公開する方法を示しています.
    public boolean isShowText (){
     return mShowText ; 
     } 
     public void setShowText (boolean showText ){ 
     mShowText = showText ;   
     invalidate ();  
     requestLayout ();
     }  
    	
    

    注意setShowTextはinvalidate()とrequestLayout()を呼び出します.これらの呼び出しは、ビューの信頼性を確保するために重要です.プロパティを変更した後、ビューを無効にする必要があります.これにより、ビューの外観が変更され、再描画が必要であることがわかります.同様に、プロパティの変更がビューのサイズやシェイプに影響を及ぼす可能性がある場合は、新しいレイアウトを要求する必要があります.これらのメソッド呼び出しを忘れると、検出しにくいエラーが発生します.
    カスタムビューでは、重要なイベントを伝えるイベントリスナーもサポートする必要があります.たとえば、PieChartが公開的に呼び出したカスタムイベントOnCurrentItemChangedは、リスナーユーザが新しい円グラフクリップに焦点を当てて円グラフを回転させたことを通知する.
    特にカスタムビューの唯一のユーザーである場合、プロパティとイベントを公開することは忘れがちです.ビューインタフェースを確認するのに時間がかかると、将来のメンテナンスコストが削減されます.良いルールは、カスタムビューの表示や動作に影響を与える任意のプロパティを常に公開することです.
    リファレンスドキュメントhttps://developer.android.google.cn/training/custom-views/create-view.html
    AndroidカスタムView学習(二)----カスタム図面https://blog.csdn.net/qq_26296197/article/details/79435060