自定义布局的学习:
xml中的自定义布局:
<com.example.loadingview.LoadingView
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/main_imageview"
android:src="@drawable/loader_frame_1"
android:layout_marginTop="160dp"
></com.example.loadingview.LoadingView>
com.example.loadingview是包名。
LoadingView是类名。
android:src是显示的图片。不是背景。
具体看链接:http://blog.youkuaiyun.com/ysh06201418/article/details/40744125
然后再具体实现自定义布局的效果。
LoadingView.java
extends ImageView implements Runnable.
ImageView 是显示图片的一个类吧。。。
Runnable 是一个借口,实现多线程的作用,请看代码注释:
/*
thread是类
runnable是接口
实现多线程有两种方式:
1.继承Thread,然后重写他的run方法
2.实现Runnable接口,并实现他的run方法
启动线程时也有区别
继承Thread的类直接调用start方法即可
实现Runnable接口要这样启动
runab :是实现Runnable接口类的对象
Thread thr = new Thread(runab);
thr.start()
*/
构造方法:
public LoadingView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
setImageIds的方法:
public void setImageIds(int[] imageId){
this.imageIds=imageId;
if(imageIds!=null&& imageIds.length>0){
length=imageIds.length;
}
}
//
private boolean isStop=false;
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
isStop=true;
};
//
在学习android的Handler 时用到自定义的View ,继承后重写View 的onDetachedFromWinfow()方法。
该方法的作用是当view离开窗口时调用(
This is called when the view is detached from a window. At this point it no longer has a surface for drawing.
)。
在做具体测试时发现,当点击返回键时,可以正常调用该方法;当点击Home键退出时无法正常调用onDetachedFromWindow()。
//
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
if(imageIds!=null&&imageIds.length>0){
this.setImageResource(imageIds[index]);
}
}
public void run(){
while(!isStop){//这里是判断是不是退出当前界面
index=++index%length;
postInvalidate();//使循环继续
try{
Thread.sleep(500);//每隔0.5s进行一次
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
启动一个新线程
public void startAnim(){
new Thread(this).start();
}