开发自定义View

前言:现在从头开始看android,对于以前漏下的东东,重新补回来,所以后面几天大家看到文章估计都是比较基础的啦。其实我更想把博客当做一种记忆工具,记录下我都学到了些什么,都做了些什么,过了几年再回头看,哇,原来我做了那么多东西,不枉此行就好了。


以前写过两篇关于布局的,链接如下:

《动态添加控件及将某XML动态加入到Activity显示》

《动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)》


本文实现效果:

自定义一个小图标(机器人),让它能根据手指滑动改变当前位置,像360在桌面上显示的东东一样的那种……


一、主Activity建立

新建一个工程(tryDynamicLayout),MainActivity对应的XML名叫:activity_main;

布局代码如下 

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/shuaige"
    android:id="@+id/mylayout" >
    

</FrameLayout>
只是加了一个背景,如上图的帅哥图片……

二、机器人小图标建立(RobotView)

代码如下:

public class RobotView extends View {
	
	public float bitmapX;
	public float bitmapY;

	public RobotView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		bitmapX=750;
		bitmapY=500;
	}

	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		super.onDraw(canvas);
		
		Paint paint =new Paint();
		Bitmap bitmap=BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_launcher);
		canvas.drawBitmap(bitmap, bitmapX, bitmapY, paint);
		if(bitmap.isRecycled()){
			bitmap.recycle();
		}
	}

}

1、定义两个变量bitmapX、bitmapY分别保存当前小机器人所要绘制的坐标。

2、关键位置在于重新OnDraw函数

根据当前的位置,绘制出小机器人图标。

(每次重绘这个View的实例的时候,都会调用OnDraw函数,也就是说在OnDraw函数里绘制成什么样,显示的出来的这个View实例就长什么样。这里我们每次重绘都绘制小机器人图标;

试想一下,如果你设计一个全局变量来保存当前重绘的次数,每次重绘都把小机器人放大一倍,你就会看到这个小机器人的图标在一直长大,其它类似……)

三、MainActivity代码

主Activity代码如下:

public class MainActivity extends Activity {
	
	private RobotView rabbit;

	@SuppressLint("ClickableViewAccessibility") @Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		FrameLayout frameLayout=(FrameLayout)findViewById(R.id.mylayout);
		rabbit=new RobotView(MainActivity.this);

		frameLayout.addView(rabbit);	
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		if(event.getAction()==MotionEvent.ACTION_MOVE)
		{
			rabbit.bitmapX=event.getX();
			rabbit.bitmapY=event.getY();
			rabbit.invalidate();
		}
		return super.onTouchEvent(event);
	}


}
1、首先在OnCreate的时候,将新建的RobotView加入到当前布局中,关于如何动态加载布局的问题,请移步 《动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)》
2、添加onTouchEvent捕捉手指在当前acitivity滑动时的坐标,将其传入新建 的RobotView实例rabbit,然后重绘rabbit;

四、扩展(360桌面图标实现)

上面的部分只是很简单的实现了一个VIEW的重建,对于更复杂的问题,比如360的桌面小人是如何实现出来的问题,有位大牛已经有现成的实例了。移步:

《Android课堂-在桌面添加可拖动/可点击的悬浮窗口(续)》


本文源码地址:http://download.csdn.net/detail/harvic880925/7694283


请大家尊重原创者版权,转载请标明出处:http://blog.csdn.net/harvic880925/article/details/38295431  万分感激……



  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值