test

android 自定义控件的实现

原文地址:http://happyrxk.cn/?post=19

下面我们介绍android自定义控件的实现,简单说就是指自己继承原有控件并增加一些方法和属性

首先我们需要在资源文件里定义所需的属性

在res/values下新建attr.xml

内容如下

<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="duration" fromat="integer">
    
</attr>

<declare-styleable name="AlphaImageView">
    <attr name="duration"/>
</declare-styleable>
</resources>

然后我们定义一个AlphaImageView类,继承ImageView

package com.happyrxk.my;

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;

public class AlphaImageView extends ImageView{
    
    private int alphaDelta = 0;
    
    private int curAlpha = 0;
    
    private final int SPEED = 300;
    
    private final int CHANGE = 0x110;
    Handler handler = new Handler(){

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            if(msg.what==CHANGE){
                curAlpha+=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;
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        this.setAlpha(curAlpha);
        final Timer timer = new Timer();
        timer.schedule(new TimerTask(){

            @Override
            public void run() {
                // TODO Auto-generated method stub
                Message msg = new Message();
                msg.what = CHANGE;
                if(curAlpha>=255){
                    timer.cancel();
                }else{
                    handler.sendMessage(msg);
                }
                
            }
            
        }, 0, SPEED);
    }
    
    

}

在我们在xml中用自定义控件是的方法如下

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:happyrxk="http://schemas.android.com/apk/res/com.happyrxk.my"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <com.happyrxk.my.AlphaImageView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
        happyrxk:duration="60000"/>

</RelativeLayout>

 

 

posted @ 2013-08-01 21:16  フ天天好心情  阅读(282)  评论(0编辑  收藏  举报