Android学习笔记之自定义UI组件

         Android中的View组件的作用类似于Swing编程中的Panel。对于Android应用的其它UI组件来说,它们都继承自View组件。基于Android UI组件的实现原理,开发者完全可以通过继承View来派生自定义组件

       下面以一个实例来说明如何开发自定义的UI组件:

实例:跟随手指的小球——开发自定义的UI组件,这个组件将会在指定位置绘制一个小球,这个位置可以动态改变。当用户通过手指在屏幕上拖动时,程序监听到这个手指事件,并把手指动作的位置传入自定义UI组件,并通知该组件重绘。

 

public class DrawView extends View 
{
	private float currentX=40;
	private float currentY=50;
      //定义并创建画笔
	Paint p=new Paint();    
	public DrawView(Context context) 
	{
		super(context);
	}	
	
	public DrawView(Context context,AttributeSet set) 
	{
		super(context,set);
	}
	
	@Override
	protected void onDraw(Canvas canvas)
	{
          //设置画笔的颜色
          p.setColor(Color.RED);
          //绘制圆
	    canvas.drawCircle(currentX,currentY,15,p);
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) 
	{
          //获得(更新)位置坐标
	    this.currentX=event.getX();
	    this.currentY=event.getY();
	    //通知当前组件重绘
	    this.invalidate();
	    return true;
	}	
}

 

Activity类中,我们把该组件添加到指定容器中。

 

public class MainActivity extends Activity 
{
    private LinearLayout layout=null;
    private DrawView draw=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
	  super.setContentView(R.layout.activity_main);
        //获取LinearLayout容器		
        this.layout=(LinearLayout) super.findViewById(R.id.layout);
        //创建DrawView组件
   	  this.draw=new DrawView(this);
        //设置组件相关属性
     	  draw.setMinimumWidth(300);
	  draw.setMinimumHeight(500);
 	  this.layout.addView(draw);
    }
}


 

       当然,为了在手机屏幕上显示出自定义的DrawView组件,我们也可以不在Activity类中动态添加,而是选择XML布局文件中添加该组件(实际上更推荐这种方法)。

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <nku.jerry.demo.DrawView 
        android:layout_width="match_parent"
        android:layout_height="match_parent" />   

</LinearLayout>


        注意,XML文件中DrawView的路径要写完整,否则会提示找不到该组件。

 

            此时,Activity程序中只需如下代码即可:

public class MainActivity extends Activity 
{

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

}


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值