按住放大,带音效的自定义按钮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的主要内容,如果未能解决你的问题,请参考以下文章