android开发中,为了显示效果,大部分控件可能需要重新开发,一般来讲大部分自定义控件可以通过继承自一个android自身控件,重写ondraw来实现。

下面就以开发一个自定义的颜色渐变button为例,说明如果开发自定义控件。

自定义button的CButton.java

package Test.wangfu.controls;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.View;

public class CButton extends View {

private int type = 0; //定义一个类属性,可以用于在程序中指定,button的样式是矩形还是圆形,这样定义的属性
//在xml中引用的时候,引用不到这个属性
public CButton(Context context, AttributeSet attrs) {
super(context, attrs);

this.type=attrs.getAttributeIntValue(null, "type", 0); //获取main.xml的cbutton定义的type属性值
}

public int getType() {
return type;
}

public void setType(int type) {
this.type = type;
this.invalidate(); //更新区域
}

@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
Paint paint = new Paint();
// 消除锯齿
paint.setAntiAlias(true);

//设置为实心
paint.setStyle(Style.FILL);

//设置过滤渐变颜色
Shader shader = new android.graphics.LinearGradient(0, 0, 100, 100,
new int[] { Color.YELLOW, Color.BLUE, Color.RED }, null,
Shader.TileMode.REPEAT);
paint.setShader(shader);

//如果等于0,绘一个圆形
if (this.getType() == 0) {
canvas.drawCircle(30, 30, 30, paint);
}
else
{
Rect r=new Rect();
r.set(0, 0, 60, 60);
canvas.drawRect(r, paint);
}
}
}

main.xml中添加控件

<Test.wangfu.controls.CButton
android:id="@+id/cbutton1"
android:layout_width="wrap_content"
android:layout_height="100px"
type="1"
/>

//在程序中修改自定义的type属性

final Test.wangfu.controls.CButton cbutton=(CButton)this.findViewById(R.id.cbutton1);
cbutton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if (cbutton.getType() == 0) {
cbutton.setType(1);
} else {
cbutton.setType(0);
}
}
});

上面一个可以有两种展示状态的自定义button控件就基本完成了。

更多相关文章

  1. 【Android(安卓)界面效果43】Android(安卓)LayoutInflater的infl
  2. Android开发之MediaPlayer使用
  3. android shape的使用 自定义 控件形状
  4. Android(安卓)H5混合开发 JS调用原生方法
  5. Android(安卓)控件的触摸事件传递与处理
  6. Android(安卓)layout属性详细说明
  7. Android(安卓)CoordinatorLayout使用 标题由图片变纯色
  8. cocos2dx在xcode下开发,编译到android上(2)
  9. Android各版本间API的差异 - ActionBar

随机推荐

  1. 横竖屏切换时候activity的生命周期 andro
  2. CrystaX NDK - 更强大的Android(安卓)NDK
  3. eclipse android开发环境 bug CDT包含路
  4. Android---2---TextView、Button、EditTe
  5. Android(安卓)上Camera分析
  6. Android(安卓)支持多屏幕机制
  7. Android(安卓)Web development Note
  8. 为Android加入busybox工具
  9. Android(安卓)RelativeLayout 相对布局解
  10. Android的多媒体框架Opencore代码阅读