android自定义view(一)
来源:互联网 发布:2位数的vip域名 编辑:程序博客网 时间:2024/06/05 06:12
第一种方式。
1 先创建这样一个自定义控件
public class CustomView extends View {
Paint paint;
public CustomView(Context context) {
super(context);
init(context,null);
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
System.out.println("两个参数的构造函数");
init(context,attrs);
}
public CustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context,attrs);
}
private void init(Context context, AttributeSet attrs) {
paint = new Paint();
paint.setColor(Color.RED);
paint.setTextSize(25.0f);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawText("一个view里面画出来的一句话", 11, 111, paint);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
2 在布局中取加载它
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
xmlns:dl="http://schemas.android.com/apk/res/cn.itheima.customview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<!-- dl中可用的属性为在attr.xml中定义的属性 -->
<cn.itheima.customview.CustomView // 这个就是一个类似button的控件了
android:layout_width="fill_parent"
android:layout_height="fill_parent"
dl:textColor="#ff00ff00"
dl:textSize="25dip" >
</cn.itheima.customview.CustomView>
</LinearLayout>
3 加载这个布局就好了
//布局文件中使用了自定义控件
public class CustomViewActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
第二种方式
1 线创建个View类
public class MainView extends FrameLayout implements View.OnClickListener{
private Context mContext;
private Activity mActivity;
private Button mArgButton;
private Button mGlobleButton;
private Button mExitButton;
public MainView(Context context){
super(context);// ????????? 这句话的作用
setupViews();
}
public MainView(Context context, AttributeSet attrs) {
super(context, attrs);
setupViews();
}
private void setupViews(){
//获取View的上下文.
mContext = getContext();
//1 利用了多态的特性
//这里将Context转换为Activity. 。
mActivity = (Activity)mContext;
// 2 动态添加布局文件
LayoutInflater inflater = LayoutInflater.from(mContext);
View v = inflater.inflate(R.layout.activity_main, null);
addView(v); // add View()
// 3 多个button监听一个事件
mArgButton = (Button)v.findViewById(R.id.arg_button);
mGlobleButton = (Button)v.findViewById(R.id.glo_button);
mExitButton = (Button)v.findViewById(R.id.exit_button);
mArgButton.setOnClickListener(this);
mGlobleButton.setOnClickListener(this);
mExitButton.setOnClickListener(this);
}
public void onClick(View v) {
if(v == mArgButton){
ToolUtils.showToast(mContext, "我是通过传递Context参数显示的!");
}else if(v == mGlobleButton){
ToolUtils.showToast("我是通过全局Context显示的!");
}else{
mActivity.finish();
}
}
}
2 在activity中加载这个View
public class ApplicationDemoActivity extends Activity {@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 1 创建自定义的视图 传递上下文。2 在构造函数中调用设置视图的方法
MainView mMainView = new MainView(this);
setContentView(mMainView);
}
}
- Android自定义View(一)
- Android 自定义View (一)
- Android 自定义View (一)
- Android自定义View(一)
- Android 自定义View (一)
- Android 自定义View(一)
- Android 自定义View (一)
- Android 自定义View (一)
- Android 自定义View (一)
- Android自定义View(一)
- Android 自定义View (一)
- Android 自定义View (一)
- Android 自定义View (一)
- Android 自定义View (一)
- Android 自定义View (一)
- Android 自定义View (一)
- Android 自定义View (一)
- Android 自定义View (一)
- LiDAR-Velodyne激光雷达pcap文件解析
- 反转字符串、整形数组某个数字出现的次数、排序
- 单链表
- #POJ3262#Protecting the Flowers(贪心)
- 例4.6 当基类含有参数的构造函数,派生类构造函数的构造方法
- android自定义view(一)
- python触发异常——raise语句
- myeclipse 10 安装了JDK1.7,java编译器无法选择到1.7的问题
- 【BZOJ 1715】 [Usaco2006 Dec]Wormholes 虫洞
- 【集训】jzoj 2017.7.15 noip模拟赛A 总结
- CF 149D Coloring Brackets(区间DP,好题,给配对的括号上色,求上色方案数,限制条件多,dp四维)
- 让IjkPlayer支持插入自定义的GPU滤镜
- 3次握手中的最后一个ACK服务端收到了吗
- Mac终端中Vim编辑器快捷键