【Android】刮刮卡实例

前言


            日常生活中,抽奖是我们都接触过的一项活动,刚开始的时候是实体的刮刮卡。后来智能手机上也能刮一刮了。在Android系统要实现刮刮卡的效果,需要用到Bitmap/Matrix/Canvas等类。下面展示代码和效果图。


刮刮卡布局文件的代码:

<span style="font-size:18px;"><TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="二等奖" 
        android:textSize="40dp"
        android:textColor="@android:color/holo_purple" />
    
    <ImageView 
        android:id="@+id/imgv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"</span>
          <span style="font-size:18px;">android:layout_centerVertical="true"  /></span>

刮刮卡中MainActivity中代码:

public class MainActivity extends Activity {<span style="font-size:18px;">
	private ImageView mImageView;
	private Bitmap alterbitmap;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mImageView = (ImageView) findViewById(R.id.imgv);  //从界面获取ImageView控件
		//从资源文件中解析一张bitmap
		Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.k_t);
			alterbitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),bitmap.getConfig());
	        //创建一个canvas对象
		Canvas canvas = new Canvas(alterbitmap);
		//创建画笔对象
		Paint paint = new Paint();
		//为画笔设置颜色
		paint.setColor(Color.BLACK);
		paint.setAntiAlias(true);
		//创建Matrix对象
		Matrix matrix = new Matrix();
		//在alterbitmap上画图
		canvas.drawBitmap(bitmap, matrix, paint);
		//设置ImageView的背景
		mImageView.setImageBitmap(alterbitmap);
		//为ImageView设置监听
		mImageView.setOnTouchListener(new OnTouchListener() {
			
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				try {
					switch (event.getAction()){
					case MotionEvent.ACTION_DOWN:
						Toast.makeText(MainActivity.this, "手指触下", 0).show();
						break;
					case MotionEvent.ACTION_MOVE:
						Toast.makeText(MainActivity.this,"手指移动("+event.getX()+","+event.getY()+")",0).show();
						int x = (int) event.getX();
						int y = (int) event.getY();
						for (int i= -10;i<10;i++){
							for(int j=-10;j<10;j++){
								//将区域类的像素点设为透明像素
								if (Math.sqrt((i*i)+(j*j))<=10){
			                           alterbitmap.setPixel(x+i, y+j,Color.TRANSPARENT);
		                                             }
							}
						}
						mImageView.setImageBitmap(alterbitmap);
						break;
					case MotionEvent.ACTION_UP:
						Toast.makeText(MainActivity.this, "手指松开", 0).show();
						break;
					}
				} catch (Exception e){
					e.printStackTrace();
				}
				return true;   //消费掉该触摸事件
			}
		});
		
	}</span>

刮刮卡的效果图:


            


评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值