Android所有的控件都继承至View,所以我们可以通过继承View来实现自己想要的控件,具体代码如下:
1,创建自定义View 类
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class CustomView extends View {
/*
画笔,用来绘制View
*/
private Paint p = new Paint();
/**
* 此构造方法用于代码生成自定义View实例
* @param context
*/
public CustomView(Context context) {
super(context);
}
/**
* 此构造方法用于XML文件生成自定义View实例
* @param context
* @param attrs
*/
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* 重写onDraw方法即可实现自定义的View效果
* @param canvas
*/
@Override
protected void onDraw(Canvas canvas) {
/*
画一个图片
*/
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
/*
100,100是图片所在的位置,可自定义
*/
canvas.drawBitmap(bitmap,100,100,p);
}
/**
* 重写此方法可以监听点击事件
* @param l
*/
@Override
public void setOnClickListener(OnClickListener l) {
super.setOnClickListener(l);
}
}
2,布局文件中添加自定义View 的效果
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:orientation="vertical"
android:paddingTop="@dimen/activity_vertical_margin">
<githan.cn.customview.CustomView
android:id="@+id/custom_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
3,MainActivity中获取自定义View实例
package githan.cn.customview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private CustomView customView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
找到自定义的View
*/
customView = (CustomView) findViewById(R.id.custom_view);
/*
设置View的监听事件
*/
customView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "onclick", Toast.LENGTH_SHORT).show();
}
});
}
}
完成这三步之后你的自定义View就可以正常显示啦,上面的例子使用自定义View画了一个图标,如下图所示
关于Paint和Canvas的使用可以阅读以下文章:
http://www.jianshu.com/p/c29d3f3b7112
如果希望自定义View能够动起来,可以通过Thread线程改变View的x, y坐标,然后调用postInvalidate()方法通知View重绘即可,这里不在叙述。