android 碎屏功能,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();

mYPointList = new ArrayList();

}

在这里声明了一个声音池(用于点击屏幕时,发出破碎的逼真效果),一个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文件中加上

android:name=".ScreenCrashMainActivity"

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

android:label="@string/app_name" >

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

原文:http://blog.csdn.net/haorantiangang/article/details/43987965

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现每日抽奖功能到达抽奖页面抽奖的步骤如下: 1. 在 Android 应用程序的布局文件添加一个按钮,用于触发抽奖事件。 ```xml <Button android:id="@+id/btn_lucky_draw" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击抽奖" /> ``` 2. 创建一个新的 Activity,用于实现抽奖功能,在该 Activity 添加一个布局文件,用于显示抽奖结果。 ```xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/tv_lucky_draw_result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="恭喜您奖了!" android:layout_centerInParent="true"/> </RelativeLayout> ``` 3. 在按钮的点击事件启动抽奖 Activity,并传递相关参数。 ```java Button btnLuckyDraw = findViewById(R.id.btn_lucky_draw); btnLuckyDraw.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 启动抽奖 Activity Intent intent = new Intent(MainActivity.this, LuckyDrawActivity.class); // 传递相关参数 intent.putExtra("userId", "123456"); startActivity(intent); } }); ``` 4. 在抽奖 Activity 获取传递的参数,并执行抽奖逻辑。 ```java public class LuckyDrawActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_lucky_draw); // 获取传递的参数 String userId = getIntent().getStringExtra("userId"); // 执行抽奖逻辑 String result = doLuckyDraw(userId); // 显示抽奖结果 TextView tvLuckyDrawResult = findViewById(R.id.tv_lucky_draw_result); tvLuckyDrawResult.setText(result); } private String doLuckyDraw(String userId) { // TODO: 实现抽奖逻辑 return "恭喜您奖了!"; } } ``` 以上就是实现每日抽奖功能到达抽奖页面抽奖的基本步骤,具体实现根据业务需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值