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" >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haorantiangang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值