1.自定义一个属性资源res/values/attr.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name = "duration" ></attr>
<declare-styleable name="AlphaImageView">
<attr name = "duration" ></attr>
</declare-styleable>
</resources>
2.自定义 包名/AlphaImageView.java
import java.util.Timer;
import java.util.TimerTask;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.widget.ImageView;
/**
*图片从无到有渐变显示的imageview
*
*/
public class AlphaImageView extends ImageView{
//图片每次改变的透明度的大小
private int alphaDelta =0;
//图片当前的透明度
private int curAlpha = 0;
private final int SPEED = 150;
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
if (msg.what == 0x123) {
curAlpha +=alphaDelta;//每次增加alphaDelta
if (curAlpha > 255) {
curAlpha = 255;
}
AlphaImageView.this.setAlpha(curAlpha);//改变透明度
}
};
};
public AlphaImageView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.AlphaImageView);
int duration = typedArray.getInt(R.styleable.AlphaImageView_duration, 0);
alphaDelta = 255*SPEED /duration;
}
@Override
protected void onDraw(Canvas canvas) {
this.setAlpha(curAlpha);
super.onDraw(canvas);
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Message msgMessage = new Message();
msgMessage.what = 0x123;
if (curAlpha>=255) {
timer.cancel();
}else {
handler.sendMessage(msgMessage);
}
}
}, 0, SPEED);
}
}
3.布局文件中使用自定义属性
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
**xmlns:user="http://schemas.android.com/apk/res/项目包名"**
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal">
<包名.AlphaImageView
android:layout_width="120dp"
android:layout_height="200dp"
android:src="@drawable/mid_pager_2"
**user:duration="6000"**
/>
</LinearLayout>