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

Posted Coding_the_world

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按住放大,带音效的自定义按钮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中再调用初始化音效。


以上是关于按住放大,带音效的自定义按钮ZoomImageView的主要内容,如果未能解决你的问题,请参考以下文章

带图像的自定义后退按钮

dw 做网页时怎么做个带点击特效的按钮

带有旋转,放大,缩小和移动在android中的自定义textview?

Paypal按钮带参数

VIPERFX完美音质设置方法?

FMOD变声如何捕获并存储处理音效之后的数据