Android 自定义View

1.新建工程

Android 自定义View

2.主MainActivity增加一个函数

Android 自定义View

 

package com.appseed.app03;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

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

    public void showClickArea(int x, int y) {
        Toast.makeText(MainActivity.this,"您点击自定义View(" + x + ", " + y + ")!",Toast.LENGTH_SHORT).show();
    }
}

3.新建自定义view类

Android 自定义View

Android 自定义View

Android 自定义View

 

新增代码如下:

package com.appseed.app03;

import android.view.View;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.MotionEvent;

public class cmView extends View {
    private Context mContext;

    public int mIndex = 0;
    public cmView(Context context) {
        this(context, null);
    }

    public cmView(Context context, AttributeSet attrs) {
        super(context, attrs) ;
        mContext = context;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor( Color.RED);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            float x = event.getX();
            float y = event.getY();

            ((MainActivity) mContext).showClickArea((int)x,(int)y);
        }
        return super.onTouchEvent(event);
    }
}

4.修改Layout

Android 自定义View

<com.appseed.app03.cmView
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginLeft="32dp"
    android:layout_marginTop="32dp"
    android:layout_marginRight="32dp"
    android:layout_marginBottom="32dp"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

运行。

 

另外一种做法:

cmView中代码改为:

public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        float x = event.getX();
        float y = event.getY();

        m_x = (int)x;
        m_y = (int)y;
        //((MainActivity) mContext).showClickArea((int)x,(int)y);
    }
   return super.onTouchEvent(event);
}

Android 自定义View

 

public void onClickView(View view){
    cmView cm = (cmView)findViewById( R.id.view01 );

    int x = cm.m_x;
    int y = cm.m_y;
    Toast.makeText(MainActivity.this,"点击(" + x + ", " + y + ")!",Toast.LENGTH_SHORT).show();
    Log.d("MainView", "Jump: ");
}/*按钮函数响应*/

 

Android 自定义View