按住放大,带音效的自定义按钮ZoomImageView

UI只给我们一张图,而领导要求我们做按住按钮时,按钮变大,移出时变回原大小。并且点击时播放音效。项目多出按钮都要用到,所以自定义了一个:

我的自定义ZoomImageView:

package com.ifsmart.brush.dt.wediget;
/**
 * 左鹏飞
 * http://blog.csdn.net/zuo8787
 */
import com.ifsmart.brush.dt.R;

import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ImageView;

public class ZoomImageView extends ImageView {
	
	private Context context;
	//控件原大小
	float xSize;
	float YSize;
	//音效
	private SoundPool sp;//声明一个SoundPool
	private int music;//定义一个整型用load();来设置suondID
	
	public ZoomImageView(Context context) {
		super(context);
		this.context = context;
		initAudio();
	}

	public ZoomImageView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		this.context = context;
		initAudio();
	}

	public ZoomImageView(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.context = context;
		initAudio();
	}
	//可以将音效文件resource id,作为参数传进了,免得写死
	private void initAudio() {
		if(sp==null){
			sp = new SoundPool(1, AudioManager.STREAM_SYSTEM, 5);//第一个参数为同时播放数据流的最大个数,第二数据流类型,第三为声音质量
			music = sp.load(context, R.raw.click_btn, 1); //把你的声音素材放到res/raw里,第2个参数即为资源文件,第3个为音乐的优先级
		}		
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
//			initAudio();
//			Log.e("tag", "ACTION_DOWN");
			xSize = getScaleX();
			YSize = getScaleY();
			setScaleX(getScaleX()*1.1f);
			setScaleY(getScaleY()*1.1f);
			sp.play(music, 1, 1, 0, 0, 1);
			break;
		case MotionEvent.ACTION_MOVE:
//			Log.e("tag", "ACTION_MOVE");
			break;
		case MotionEvent.ACTION_UP:
//			Log.e("tag", "ACTION_UP");
			setScaleX(xSize);
			setScaleY(YSize);
			break;
		default:
			break;
		}
		return super.onTouchEvent(event);
	}
	
}

注释很详细,直接就可以拿去用,音效文件改成你自己的音乐文件就行了。

注:在构造方法里初始化音效,会导致xml布局中看不到控件的样式。想在xml布局看到正常显示的样式的话,自定义控件中屏蔽

initAudio();
然后记得在activity中再调用初始化音效。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值