Android自定義view仿QQ的Tab按鈕動畫效果(示例代碼)

話不多說 先上效果圖

實現其實很簡單,先用兩張圖

一張是背景的圖,一張是笑臉的圖片,笑臉的圖片是白色,可能看不出來。實現思路:主要是再觸摸view的時候同時移動這兩個圖片,但是移動的距離不一樣,造成的錯位感,代碼很簡單:

import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.view.MotionEvent
import android.view.View
import com.example.dawnmvvm.R
import com.example.dawnmvvm.util.LogUtil
 
class MyDrawBitmap @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, defStyleRes: Int = 0) : View(context, attrs, defStyleAttr, defStyleRes) {
 private var dx = 0f
 private var dy = 0f
 private var dx1 =0f
 private var dy1 = 0f
 private val bitmap: Bitmap by lazy {
  BitmapFactory.decodeResource(resources, R.drawable.bg_tab);//背景
 }
 private val bitmap2: Bitmap by lazy {
  BitmapFactory.decodeResource(resources, R.drawable.img_smile);//笑臉
 }
 
 override fun draw(canvas: Canvas?) {
  super.draw(canvas)
 
  LogUtil.e("MyDrawBitmap===x===${dx}")
  LogUtil.e("MyDrawBitmap===y===${dy}")
  if(dx<0){
   dx=0f
  }
  if(dy<0){
   dy=0f;
  }
 
  canvas?.drawBitmap(bitmap, dx, dy, null);//移動背景
  canvas?.drawBitmap(bitmap2, dx1, dy1, null);//移動笑臉
 }
 
 override fun onTouchEvent(event: MotionEvent): Boolean {
 
  when (event.action) {
 
   MotionEvent.ACTION_UP-> {
 
    dx = 0f
    dy = 0f
    dx1 = 0f
    dy1 = 0f
   }
   else->{
    dx = event.x/20f
    dy = event.y/20f
    dx1 = event.x/10f
    dy1 = event.y/10f
   }
 
  }
  invalidate()
 
  return true;
 }
 
}

是不是很簡單,不過不是很完美

到此這篇關於Android自定義view仿QQ的Tab按鈕動效效果(示例代碼)的文章就介紹到這瞭,更多相關Android仿QQ的Tab按鈕動效內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: