Androidカスタムコントロール開発入門(三)


前回はどのようにカスタマイズコントロールを説明してから、Viewのいくつかのアプリを挙げました.カスタマイズした時に書き換えができる方法を説明しました.そして、一例の2つの書き方を通して、基本的なカスタムコントロールと私達がよく理解して、積極的にViewの方法を書き直したいという精神を示しました.今回は引き続き勉強します.
 私たちがAndroidの元のコントロールを使った時の感想を思い出してください.良いコントロールはxmlの中で様々な属性の操作ができます.カスタマイズコントロールはしばしば特殊な需要があります.
ここで詳しく紹介します.もしカスタムViewにはカスタム属性が必要です.どうすればいいですか?
私達はやはりこの例を使って、拡大を続けます.例えば、xmlに球体の半径を設定したいですが、どうすればいいですか?
まず、カスタム属性の簡単な基礎を具体的に調べてみましょう.
まずプロパティファイルのformatオプションを見てください. 
    カスタムコントロールがコントロールの属性をカスタマイズする必要がある場合.開始前に、valuesディレクトリの下にatrs.xmlがあるかどうかを確認したいです.ない場合は作成します.まず、フォーマットの属性タイプを調べてみます.
フォーマットオプション
「reference」 //参照
カラー //色
 「bollan」 //ブール値
 「ディメンション」 //サイズ値
 「float」 //浮動小数点の値
 「インテグ」 //整数値
 ストリングス //文字列
 「fraction」 //百点は200%です
 
ここで私たちの例はいくつかのカスタム属性を使って理解してくれます.半径、色、そしてボールが止まったところを定義すればいいです.
まずatrs.xmlを作成します.
コードは以下の通りです
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="MoveBallversion3">
        <attr name="BallColor" format="color" />
        <attr name="BallRadius" format="float" />
        <attr name="BallStartX" format="float" />
        <attr name="BallStartY" format="float" />
    </declare-styleable>
    
 

</resources>
MoveBallversion 3はjavaコードの中でこれらのデータの名前を見つけるために使われています.下の各前部は属性名で、後部はタイプです.
その後、カスタムコントロールを作成する時にはユーザー定義の属性が使えますが、設定する時は注意してください.
1)その中のcomple.example.customcomponents demo.DrawView 3は表示が必要なコントロールに代表されるクラスです. 2)comp.example.customcomponents demoはクラスのパッケージ名で、
manifastの中のpackage住所です.
 3)DrawView 3は類名です.このクラスは确かにViewのカスタムクラスから継承されています.プロジェクトの直接ソースでxxxxx.javaを追加することができます.また、libsディレクトリの下で新たに追加されたjarパッケージの中にもあります.jarカバンの中の一つの種類なら、経路はjarカバンの中にあります.
Xmlは以下の通りです
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myball="http://schemas.android.com/apk/res/com.example.customcomponentsdemo"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="  MoveBall Demo   3"
        android:textColor="@color/white" >
    </TextView>

    <com.example.customcomponentsdemo.component.DrawView3
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp"
        myball:BallColor = "@color/white"
        myball:BallRadius = "20"
        myball:BallStartX = "50"
        myball:BallStartY = "200" >
    </com.example.customcomponentsdemo.component.DrawView3>
    
    

</LinearLayout>
あとは書き換える時に取ってもいいです.
 
でも、時々このような間違いがあります.
コントロールのカスタム属性を使用して、名前空間を入力します. 
いつものように:http://schemas.android.com/apk/コントロールのアドレス 
コンパイル時にエラロ:No resource identifer found for atribute'xxxt'in packageを報告します.
 
解決:コードはn回見ても問題を見つけられませんでした.最後にネットで外国人の回答を見ました.ADTアップグレード後、カスタムコントロールの名前空間へのパスアクセスが最適化されました.
http://schemas.android.com/apk/res-auto このようにしてADTを充填すると、自動的に該当するパケット経路の下を探します.
私たちは下を見続けています.
私たちはDrawView 3.javaにいます. コードの作成は次のようになります.ここでは、定義された属性を取得し、取得方法においては通常デフォルト値を設定します. 36 ); ), 私達がxmlにいることを防止します ファイルに定義がありません.標準値を使用します.
MoveBallversion 3は「declare-style bleaname=」で定義されています. "> の名前を取得します. 名前 属性 接続すればいいです.TypedAray 通常最後に呼び出します .recycle() 方法は、この属性の整合性を後で維持するために使用します.
はい、具体的なコードを見てみます.
package com.example.customcomponentsdemo.component;

import com.example.customcomponentsdemo.R;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class DrawView3 extends View {

	private float CircleX;
	private float CircleY;
	private float CircleR;
	private int BallColor;




	public DrawView3(Context context, AttributeSet attrs) {
		super(context, attrs);
		
		
		//        
		TypedArray a = context.obtainStyledAttributes(attrs,
				R.styleable.MoveBallversion3);

		//      X     ,     :10
		CircleX = a.getFloat(R.styleable.MoveBallversion3_BallStartX, 10);
		//           ,     :10
		CircleY = a.getFloat(R.styleable.MoveBallversion3_BallStartY, 10);
		//           ,     :10
		CircleR = a.getFloat(R.styleable.MoveBallversion3_BallRadius, 10);
		//        ,     :0x990000FF
		BallColor = a.getColor(R.styleable.MoveBallversion3_BallColor, 0x990000FF);

		a.recycle();

	}

	
	@Override
	public void onDraw(Canvas canves) {
		Paint paint = new Paint();

		paint.setColor(BallColor);
		canves.drawCircle(CircleX, CircleY, CircleR, paint);
	}

	@Override
	public boolean onTouchEvent(MotionEvent motionevent) {

		CircleX = motionevent.getX();
		CircleY = motionevent.getY();
		this.invalidate();

		return true;

	}

}
具体的な注釈も書きました.コードをよく見てください.続いてactivityのコードです.何も言いません.
package com.example.customcomponentsdemo.Activity;

import com.example.customcomponentsdemo.R;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;

public class MoveBallActivity3 extends Activity{
	
	@Override
	protected void onCreate(Bundle savedInstanceState){
		
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_moveball3);
	}

}
このように、私達の第三の教程はここで終わります.今回はカスタムViewの場合、カスタムViewの属性が必要であれば、どのように処理すればいいですか?このシリーズの完結編です.Viewをカスタマイズする道はまだ遠いです.私も難しい例を挙げていません.基礎知識の設計プロセスはこのようになっていると思います.義コントロールの作成は残りの皆さんが次の基礎の上で発揮しました.その後、いい例があれば、続けて補足します.
ソースの住所は:http://download.csdn.net/detail/sunmc1204953974/7738915
みんなが学ぶことができることを望みます!
また、私も学生です.よくないところや間違ったところがあれば、よろしくお願いします.ありがとうございます.