国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android使用Canvas對象實現刮刮樂效果

2019-12-12 01:00:47
字體:
來源:轉載
供稿:網友

在淘寶、京東等電商舉辦活動的時候,經常可以看到在移動客戶端推出的各種刮獎活動,而這種活動也受到了很多人的喜愛。從客戶端的體驗來說,這種效果應該是通過網頁來實現的,那么,我們使用Android的自帶控件能不能實現這種刮刮樂的效果呢?當然可以,本篇文章將介紹使用Canvas這個對象,如何實現“刮刮樂”的效果。

先看效果圖

下面我們看一下如何使用代碼實現

布局文件

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:tools="http://schemas.android.com/tools"   android:layout_width="match_parent"   android:layout_height="match_parent" >    <ImageView     android:id="@+id/after"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:src="@drawable/a" />    <ImageView     android:id="@+id/before"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:src="@drawable/b" />  </FrameLayout> 

Activity代碼

public class MainActivity extends Activity implements OnTouchListener {    private ImageView imgafter;   private ImageView imgbefore;   private Canvas canvas;   private Paint paint;   private Bitmap bitmap;   private Bitmap before;   private Bitmap after;    @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);      imgafter = (ImageView) findViewById(R.id.after);     imgbefore = (ImageView) findViewById(R.id.before);      // 獲得圖片     after = BitmapFactory.decodeResource(getResources(), R.drawable.a);     before = BitmapFactory.decodeResource(getResources(), R.drawable.b);      imgafter.setImageBitmap(after);     imgbefore.setImageBitmap(before);     // 創建可以修改的空白的bitmap     bitmap = Bitmap.createBitmap(before.getWidth(), before.getHeight(),         before.getConfig());     imgbefore.setOnTouchListener(this);     paint = new Paint();     paint.setStrokeWidth(5);     paint.setColor(Color.BLACK);     // 創建畫布     canvas = new Canvas(bitmap);     canvas.drawBitmap(before, new Matrix(), paint);   }    @Override   public boolean onTouch(View arg0, MotionEvent event) {     switch (event.getAction()) {     case MotionEvent.ACTION_MOVE:       int newX = (int) event.getX();       int newY = (int) event.getY();       // 將滑過的地方變為透明       for (int i = -10; i < 10; i++) {         for (int j = -10; j < 10; j++) {           if ((i + newX) >= before.getWidth()               || j + newY >= before.getHeight() || i + newX < 0               || j + newY < 0) {             return false;           }           bitmap.setPixel(i + newX, j + newY, Color.TRANSPARENT);         }       }       imgbefore.setImageBitmap(bitmap);       break;     }     return true;   } } 

可以看到,代碼很簡單,幾十行代碼就實現了簡單的“刮刮樂”的效果。

原理是這樣的,一開始兩張圖片重疊,顯示的還沒有刮開的效果。

在Activity的onTouch方法中,我們對滑動事件進行監聽,當用戶用手指滑動屏幕的時候,我們將滑過的畫布部分的顏色設置為透明,同時,把改變之后的bitmap對象設置為ImageView的背景,這樣,隱藏在后面的圖片就顯示出來了,也就實現了刮刮樂的效果。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 麻阳| 桂阳县| 阳谷县| 县级市| 开鲁县| 全南县| 达日县| 临海市| 仙游县| 新民市| 玉龙| 巴塘县| 汤阴县| 吉水县| 承德市| 福贡县| 凤台县| 沙湾县| 抚州市| 河津市| 左贡县| 湖口县| 锦屏县| 探索| 宿州市| 肥城市| 保定市| 连江县| 新沂市| 石棉县| 吴堡县| 克拉玛依市| 碌曲县| 永吉县| 太湖县| 弥渡县| 凤阳县| 河源市| 界首市| 旺苍县| 汾阳市|