AndroidカスタムViewの一般的な手順


1、現在のViewカスタム属性を設定する
resのvaluesフォルダの下にattrsファイルを新規作成し、attrsファイルに関連するカスタムプロパティを設定する必要があります.
カスタム属性の名前の設定
<!-- format                     ,       |    ,           -->
<attr name="user_defined_attribute" format="color" />  
<!--         ,                ,   android    android:visibility   -->
<attr name="user_defined_attribute1" format="enum">
    <enum name="type_0" value="0" />
    <enum name="type_1" value="1" />
</attr>  

これらのプロパティが属するdeclare-styleableを定義します.
<declare-styleable name="MyViewStyleable">
    <attr name = "user_defined_attribute"/>
    <attr name = "user_defined_attribute1"/>
</declare-styleable>  

2、関連するviewを継承し、構築方法で関連する属性を取得する
カスタムビューは、通常、システムが適切なビューを持っているかどうかを優先して使用されます.もしある場合は、システムの既存のビューを継承して拡張する必要があります.システムに類似のビューがなければ、対応するビューをカスタマイズします.
    public CustomVolumControlBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray a = context.getTheme().
                obtainStyledAttributes(attrs, R.styleable. MyViewStyleable, 
                defStyleAttr, 0);
        int n = a.getIndexCount();
        for (int i = 0; i < n; i++) {
            int index = a.getIndex(i);
            switch (index) {
            case R.styleable. MyViewStyleable_user_defined_attribute:
                mAttribute = a.getInt(index, 20);
                break;
            case R.styleable. MyViewStyleable_user_defined_attribute1:
                mAttribute1= a.getInt(index, 0);
                break;
            }
        }
        a.recycle();
    }  

また、構造方法は、ブラシの初期化などの作業も担当するのが一般的です.
3、onMeasure(またはonSizeChange)メソッドで属性に値を付ける
ここでは、現在のviewの幅の高さを決定し、幅の高さに基づいて座標のデフォルト値を計算するために一般的に使用されます.通常、ここでは次のコードが使用されます.

//       
/** * MeasureSpec                 ,  MeasureSpec              * MeasureSpec size mode  。 *   Mode: * 1.UNSPECIFIED *             ,        (      ) *        ,   UNSPECIFIED * 2.EXACTLY *          ,           ,         。 * (   width height match_parent ,   EXACTLY,   *  view          ,         ) * 3.AT_MOST *              * (    wrap_content ,   AT_MOST,    view        , *    view               ) * * MeasureSpecs              。 */   
//       :
//wrap_parent -> MeasureSpec.AT_MOST
//match_parent -> MeasureSpec.EXACTLY
//    -> MeasureSpec.EXACTLY
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
//       
int heightSize= MeasureSpec.getSize(heightMeasureSpec);
//                    
heightMeasureSpec = MeasureSpec.makeMeasureSpec(exceptHeight, MeasureSpec.EXACTLY);       
//      
setMeasuredDimension(wght, wght);

4、onDrawメソッドで関連するカスタムviewを描く
現在のキャンバスを取得し、対応するブラシでペイント操作を行う必要があります.通常、次の方法に関連します.
//    Canvas   save  ,    Canvas   、  、  、  、     
canvas.save();
//    Canvas       。  save  Canvas              
canvas.restore();
//save restore     (restore   save ,    ),
//  restore     save ,   Error
//                            ,         

//           
ccanvas.translate(x,y);  
//          
canvas.rotate(30);  

どんなに複雑なViewでも、ペイントで何度も描きます.だからゆっくりとブラシを調整して、色を調整すれば、良いカスタムviewが現れます.
5、onTouchEventメソッドの書き換え(ジェスチャー制御関連)
一般的に、ユーザと対話するためにアクセサリー関連の操作を検出するために使用されます.設計の構想は通常以下の通りである.
1.ユーザの現在のクリック(タッチ、リフト)座標を取得する
2.シングルフロント座標と描画したViewで比較
3.予め設定された論理に従って、対応する位置で関連する操作を実行する.(再描画や移動など)
6、xmlファイルでの使用
1.フルパス名カスタムコントロールを参照
2.カスタムコントロールにカスタム属性を導入する
次のコードに示します.
<com.test.myview.view.MyTestView
    <!-- hwy         ,    ,res   AndroidManifest    ,
                   -->
    xmlns:hwy="http://schemas.android.com/apk/res/com.test.myview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    hwy: user_defined_attribute="#ffffffff"
    hwy: user_defined_attribute1="type_1"/>