android中关于点击屏幕,实现破碎的效果的实现

昨天网上,跟哥们讨论起点击屏幕破碎的效果,今天索性就拿出时间整理一下,很简单奥,

基本思路:

1. 自定义一个View,用于展示这个破碎的的效果

2.在activity中加入这个view,通过setContentView(view);

3.注意要把activity的theme设置成 android:theme="@android:style/Theme.Translucent.NoTitleBar"  ,这样玩起来会更有效果。

首先重写一个view,我们就叫CustomeView吧。自己随便定义就好。

定义构造函数 如下:

public CustomView(Context context, AttributeSet attrs) {

super(context);

this.setKeepScreenOn(true);

this.setFocusable(true);

this.setLongClickable(true);

this.mSoundPool = new SoundPool(5, AudioManager.STREAM_SYSTEM, 5);

this.mSoundMap.put(1, mSoundPool.load(context, R.raw.cfokwowbfv, 1));

this.mBitmap = BitmapFactory.decodeResource(getResources(),

R.drawable.screen);

mXPointList = new ArrayList<Float>();

mYPointList = new ArrayList<Float>();

}

在这里声明了一个声音池(用于点击屏幕时,发出破碎的逼真效果),一个bitmap,用于显示屏幕破碎

在就是两个list分别是mXPointList 和mYPointList,用于保存点击时x和y的点。

接着,我们看一下OntouchEvent()

@Override

public boolean onTouchEvent(MotionEvent arg1) {

// TODO Auto-generated method stub

switch (arg1.getAction()) {

case MotionEvent.ACTION_DOWN:

playSound();//发声

mXPointList.add(arg1.getX());

mYPointList.add(arg1.getY());

postInvalidate();//刷新界面

mCount++;//点击的个数,其中,mLength是总个数

if (mCount > mLength) {

mXPointList.remove(0);

mYPointList.remove(0);

mLength++;

}

break;

case MotionEvent.ACTION_UP:

break;

case MotionEvent.ACTION_MOVE:

break;

default:

break;

}

return super.onTouchEvent(arg1);

}

大家可以参照我写的注释,一看就明白

最后是onDraw()方法,此方法尤为重要。

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

for (int i = 0; i < mXPointList.size(); ++i) {//点了多少次,就把破碎的图片显示多少次

canvas.drawBitmap(mBitmap, mXPointList.get(i) - mBitmap.getWidth()

/ 2, mYPointList.get(i) - mBitmap.getHeight() / 2, null);

}

}

然后在要引用的activity中的oncreate方法中进行如下设置:

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

CustomView view = new CustomView(this, null);

setContentView(view);

}

另外,不要忘了在mainfest文件中加上

<activity

android:name=".ScreenCrashMainActivity"

android:theme="@android:style/Theme.Translucent.NoTitleBar"

android:label="@string/app_name" >

效果更逼真。嘻嘻。好了,打完收工!

时间: 2024-11-10 00:59:45

android中关于点击屏幕,实现破碎的效果的实现的相关文章

android中View点击和触摸事件的处理

android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解. 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_MOVE->ACTION_UP 当屏幕中包含一个ViewGroup,而这个ViewGroup又包含一个子view,这个时候android系统如何处理Touch事件呢?到底 是View

Android中如何让手机屏幕不待机

在Android中,申请WakeLock可以让你的进程持续执行即使手机进入睡眠模式,比较实用的是比如后台有网络功能,可以保证操作持续进行. 方法: 在操作之前加入             PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);             wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Con

Android中使用ViewPager实现屏幕页面切换和页面轮播效果

之前关于如何实现屏幕页面切换,写过一篇博文<Android中使用ViewFlipper实现屏幕切换>,相比ViewFlipper,ViewPager更适用复杂的视图切换,而且Viewpager有自己的adapter,这也让其适应复杂对象,实现数据的动态加载. ViewPager是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.而viewpager就是其中之一,利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等. 下面我们就展示下Vie

android中listview点击事件失效的灵异事件

首先说明一下我想实现的功能: 点击某个item之后,让其颜色发生变化.如果变化网上有很多例子,我就不班门弄斧了.Listview之所以点击没有反应是因为上图中绿色部分(自己定义的一个继承BaseAdapter的adapter来适应listview)将listview的item覆盖了.现在点击的只是自定义的adapter中的convertView. 其次,自定义的adapter中包含一个ImageView和二个TextView.代码如下: <?xml version="1.0" e

Android中设置半个屏幕大小且居中的按钮布局 (layout_weight属性)

先看如下布局 : 上图中,按钮的大小为屏幕的一半,然后居中显示在布局中央,每个人心中都有自己的答案,看看我的方法吧,布局布局xml如下 : <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_layout&

Android中ListView字母排序,实现字母挤压效果以及右侧快速选中字母,搜索关键字功能

Android中ListView字母排序,实现字母挤压效果以及右侧快速选中字母,搜索关键字功能 本文中阐述如何自定义EditText实现搜索框自定义的样式以及挤压字母的思路等 自定义EditText 相关的drawable文件 主界面以及相关的适配器 结果展示 定义要呈现的EditText的样式 public class ClearEditText extends EditText implements OnFocusChangeListener, TextWatcher { /** * 定义删

Android中Activity运行时屏幕方向与显示方式详解

现在我们的手机一般都内置有方向感应器,手机屏幕会根据所处位置自动进行横竖屏切换(前提是未锁定屏幕方向).但有时我们的应用程序仅限在横屏或者竖屏状态下才可以运行,此时我们需要锁定该程序Activity运行时的屏幕方向.还有就是在我们用手机观看视频时,随意的进行横竖屏切换,但播放进度不会随着屏幕的转换而从头开始播放,为了实现这个功能,我们就需要在Activity转换时对当前数据进行保存. 现在根据以上两种需求,个人提出以下解决方案: 一.锁定Activity运行时屏幕方向,如下图(演示锁定横屏):

android中button点击两次才响应onclick方法

页面上刚好有EditText   而此时焦点在EditText上  我们点击button时会出现这种情况: 第一次点击好像是获取焦点,第二次才是点击事件 xml文件中button增加android:focusableInTouchMode="false"

Android中使用ViewFlipper实现屏幕切换

屏幕切换指的是在同一个Activity内屏幕间的切换,ViewFlipper继承了Framelayout类,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果.如下动图: 该类有如下几个和动画相关的函数: setInAnimation:设置View进入屏幕时候使用的动画,该函数有两个版本,一个接受单个参数,类型为android.view.animation.Animation:一个接受两个参数,类型为Context和int,分别为Context对象和定义An