这篇博客主要是写了功能的实现,在前面已经写了原理。
Android 自定义View 通过Paint和Canvas实现动态打勾对号效果
Android Toast 吐司 自定义使用 展示图片 Toast自定义教程(一)
老规矩,先上效果图
效果图
其实就是复用了之前写的自定义view,然后再写一个自定义布局的Toast。
动态打勾不再讲解,需要了解点击这里
先说布局,很简单的一个布局
布局view_toast_image.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toast_relative"
android:background="#7A2B2929"
android:layout_width="130dp"
android:layout_height="130dp">
<LinearLayout
android:id="@+id/toast_linear"
android:padding="10dp"
android:orientation="vertical"
android:layout_width="130dp"
android:layout_height="130dp">
<com.example.drawhookviewdemo.DrawHookMarkView
android:layout_width="100dp"
android:layout_height="90dp" />
<TextView
android:layout_marginTop="-10dp"
android:id="@+id/tv_toast_clear"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="30dp"
android:textSize="13sp"
android:textColor="#fff"
android:text="" />
</LinearLayout>
</RelativeLayout>
偷了个懒直接在MainActivity写了方法
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {showToastWithImage("登录成功") }
}
//带图片的toast
fun showToastWithImage(message: CharSequence) {
var mtoastView = LayoutInflater.from(applicationContext).inflate(R.layout.view_toast_image, null)
val relativeLayout = mtoastView?.findViewById(R.id.toast_linear) as LinearLayout
//动态设置toast控件的宽高度,宽高分别是130dp
//这里用了一个将dp转换为px的工具类PxUtil
val layoutParams = RelativeLayout.LayoutParams(DisplayUtils.dp2px(applicationContext, 130f).toInt(), DisplayUtils.dp2px(applicationContext, 130f).toInt())
relativeLayout.setLayoutParams(layoutParams)
val textView = mtoastView?.findViewById(R.id.tv_toast_clear) as TextView
textView.text = message
val mToast = Toast(application)
mToast.setDuration(Toast.LENGTH_LONG);
mToast?.setGravity(Gravity.CENTER, 0, 0)
mToast.setView(mtoastView)
mToast?.show()
}
}