最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android使用Canvas對象實(shí)現(xiàn)刮刮樂效果

 更新時間:2021年09月26日 15:02:59   作者:趙凱強(qiáng)  
這篇文章主要介紹了Android使用Canvas對象實(shí)現(xiàn)刮刮樂效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在淘寶、京東等電商舉辦活動的時候,經(jīng)??梢钥吹皆谝苿涌蛻舳送瞥龅母鞣N刮獎活動,而這種活動也受到了很多人的喜愛。從客戶端的體驗(yàn)來說,這種效果應(yīng)該是通過網(wǎng)頁來實(shí)現(xiàn)的,那么,我們使用Android的自帶控件能不能實(shí)現(xiàn)這種刮刮樂的效果呢?當(dāng)然可以,本篇文章將介紹使用Canvas這個對象,如何實(shí)現(xiàn)“刮刮樂”的效果。

先看效果圖

下面我們看一下如何使用代碼實(shí)現(xiàn)

布局文件

<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); 
    // 創(chuàng)建可以修改的空白的bitmap 
    bitmap = Bitmap.createBitmap(before.getWidth(), before.getHeight(), 
        before.getConfig()); 
    imgbefore.setOnTouchListener(this); 
    paint = new Paint(); 
    paint.setStrokeWidth(5); 
    paint.setColor(Color.BLACK); 
    // 創(chuàng)建畫布 
    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(); 
      // 將滑過的地方變?yōu)橥该?
      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; 
  } 
}

可以看到,代碼很簡單,幾十行代碼就實(shí)現(xiàn)了簡單的“刮刮樂”的效果。

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

合川市| 汤阴县| 临沂市| 若尔盖县| 西林县| 丁青县| 会泽县| 溆浦县| 华安县| 阿拉善盟| 白水县| 临湘市| 花莲县| 宕昌县| 铁岭市| 宣武区| 福安市| 新民市| 峨边| 兰州市| 太保市| 曲麻莱县| 黎川县| 昆山市| 喀喇沁旗| 凌云县| 南靖县| 新宁县| 桐城市| 石渠县| 长葛市| 莒南县| 宁安市| 瑞昌市| 齐河县| 丰镇市| 旌德县| 罗山县| 保康县| 青冈县| 当涂县|