android中关于点击屏幕,实现破碎的效果的实现
生活随笔
收集整理的這篇文章主要介紹了
android中关于点击屏幕,实现破碎的效果的实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
昨天網(wǎng)上,跟哥們討論起點(diǎn)擊屏幕破碎的效果,今天索性就拿出時(shí)間整理一下,很簡(jiǎn)單奧,
基本思路:
1. 自定義一個(gè)View,用于展示這個(gè)破碎的的效果
2.在activity中加入這個(gè)view,通過setContentView(view);
3.注意要把a(bǔ)ctivity的theme設(shè)置成 android:theme="@android:style/Theme.Translucent.NoTitleBar" ?,這樣玩起來會(huì)更有效果。
首先重寫一個(gè)view,我們就叫CustomeView吧。自己隨便定義就好。
定義構(gòu)造函數(shù) 如下:
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>();?
}
在這里聲明了一個(gè)聲音池(用于點(diǎn)擊屏幕時(shí),發(fā)出破碎的逼真效果),一個(gè)bitmap,用于顯示屏幕破碎 在就是兩個(gè)list分別是mXPointList?和mYPointList,用于保存點(diǎn)擊時(shí)x和y的點(diǎn)。
接著,我們看一下OntouchEvent() ?@Override ?public boolean onTouchEvent(MotionEvent arg1) { ? // TODO Auto-generated method stub ? switch (arg1.getAction()) { ? case MotionEvent.ACTION_DOWN: ? ?playSound();//發(fā)聲 ? ?mXPointList.add(arg1.getX()); ? ?mYPointList.add(arg1.getY()); ? ?postInvalidate();//刷新界面 ? ?mCount++;//點(diǎn)擊的個(gè)數(shù),其中,mLength是總個(gè)數(shù) ? ?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) {//點(diǎn)了多少次,就把破碎的圖片顯示多少次 canvas.drawBitmap(mBitmap, mXPointList.get(i) - mBitmap.getWidth() / 2, mYPointList.get(i) - mBitmap.getHeight() / 2, null); } }
然后在要引用的activity中的oncreate方法中進(jìn)行如下設(shè)置:
@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" >
效果更逼真。嘻嘻。好了,打完收工!
在這里聲明了一個(gè)聲音池(用于點(diǎn)擊屏幕時(shí),發(fā)出破碎的逼真效果),一個(gè)bitmap,用于顯示屏幕破碎 在就是兩個(gè)list分別是mXPointList?和mYPointList,用于保存點(diǎn)擊時(shí)x和y的點(diǎn)。
接著,我們看一下OntouchEvent() ?@Override ?public boolean onTouchEvent(MotionEvent arg1) { ? // TODO Auto-generated method stub ? switch (arg1.getAction()) { ? case MotionEvent.ACTION_DOWN: ? ?playSound();//發(fā)聲 ? ?mXPointList.add(arg1.getX()); ? ?mYPointList.add(arg1.getY()); ? ?postInvalidate();//刷新界面 ? ?mCount++;//點(diǎn)擊的個(gè)數(shù),其中,mLength是總個(gè)數(shù) ? ?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) {//點(diǎn)了多少次,就把破碎的圖片顯示多少次 canvas.drawBitmap(mBitmap, mXPointList.get(i) - mBitmap.getWidth() / 2, mYPointList.get(i) - mBitmap.getHeight() / 2, null); } }
然后在要引用的activity中的oncreate方法中進(jìn)行如下設(shè)置:
@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" >
效果更逼真。嘻嘻。好了,打完收工!
總結(jié)
以上是生活随笔為你收集整理的android中关于点击屏幕,实现破碎的效果的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android滤镜效果,Android图
- 下一篇: Linux内核源代码获取方法