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

首頁 > 系統 > Android > 正文

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

2019-10-22 18:12:46
字體:
來源:轉載
供稿:網友

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

先看效果圖

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的背景,這樣,隱藏在后面的圖片就顯示出來了,也就實現了刮刮樂的效果。

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 比如县| 丹棱县| 呈贡县| 清涧县| 长垣县| 永顺县| 武陟县| 扶沟县| 克东县| 奉新县| 寿阳县| 互助| 台南市| 麻城市| 晴隆县| 南宁市| 治县。| 葵青区| 旅游| 龙江县| 化德县| 宜君县| 新津县| 平谷区| 江门市| 湖南省| 新宁县| 葵青区| 靖边县| 宁波市| 石门县| 贵定县| 永兴县| 江门市| 铁岭县| 枝江市| 文登市| 改则县| 宿松县| 尉犁县| 武穴市|