Android學習:自定義組件,DrawView

 

 佈局文件:java

<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=".CustomViewActivity"
    android:id="@+id/root"
    android:orientation="vertical">
</LinearLayout>

自定義類:android

這個類必須寫在一個獨立的java文件中canvas

public class DrawView extends View
{
    public float currentX = 40;
    public float currentY = 50;
    // 定義、並建立畫筆
    Paint p = new Paint();
    public DrawView(Context context)
    {
        super(context);
    }
    public DrawView(Context context , AttributeSet set)
    {
        super(context,set);
    }
    @Override
    public void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);
        // 設置畫筆的顏色
        p.setColor(Color.RED);
        // 繪製一個小圓(做爲小球)
        canvas.drawCircle(currentX, currentY, 15, p);
    }
    // 爲該組件的觸碰事件重寫事件處理方法
    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        // 修改currentX、currentY兩個屬性
        currentX = event.getX();
        currentY = event.getY();
        // 通知當前組件重繪本身
        invalidate();
        // 返回true代表該處理方法已經處理該事件
        return true;
    }
}

將組件添加到容器中去ide

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LinearLayout root=(LinearLayout) findViewById(R.id.root);
        final myDrawView draw=new myDrawView(this);
        draw.setMinimumWidth(300);
        draw.setMinimumHeight(500);
        root.addView(draw);
    }
}

 

也能夠在佈局文件里加載自定義的組件。把佈局文件修改以下:佈局

Android studio在寫佈局文件的時候,代碼補全能夠偵測到自定義組件的名字,確實很智能。this

<?xml version="1.0" encoding="utf-8"?>
<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="myDrawView"
    android:id="@+id/root"
    android:orientation="vertical">

    <allegro.mydrawview.myDrawView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

這樣在java代碼中沒必要要額外寫代碼加載自定義的組件了。下面的代碼已經註釋了加載組件的代碼。spa

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*LinearLayout root=(LinearLayout) findViewById(R.id.root);
        final myDrawView draw=new myDrawView(this);
        draw.setMinimumWidth(300);
        draw.setMinimumHeight(500);
        root.addView(draw);*/
    }
}

 

 

 這個程序的效果是,隨手指移動的小球。code

相關文章
相關標籤/搜索