Android拖放startDragAndDrop拖拽onDrawShadow動態(tài)添加View,Kotlin(3)
import android.content.ClipData
import android.graphics.Canvas
import android.graphics.Point
import android.os.Bundle
import android.util.Log
import android.view.DragEvent
import android.view.View
import android.view.View.OnDragListener
import android.view.View.OnLongClickListener
import android.widget.FrameLayout
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
class MainActivity : AppCompatActivity() {
private val TAG = "fly"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val imageView = findViewById<ImageView>(R.id.image)
val builder = MyDragShadowBuilder(imageView)
imageView.setOnLongClickListener(object : OnLongClickListener {
//長按事件觸發(fā)拖拽
override fun onLongClick(v: View?): Boolean {
Log.d(TAG, "onLongClick")
val data = ClipData.newPlainText("name", "phil")
imageView.startDragAndDrop(
data,
builder,
null,
0 or View.DRAG_FLAG_GLOBAL or View.DRAG_FLAG_OPAQUE
)
return true
}
})
imageView.setOnDragListener(object : OnDragListener {
override fun onDrag(v: View?, event: DragEvent?): Boolean {
when (event?.action) {
DragEvent.ACTION_DRAG_STARTED -> Log.d(TAG, "DragEvent.ACTION_DRAG_STARTED")
DragEvent.ACTION_DRAG_ENTERED -> Log.d(TAG, "DragEvent.ACTION_DRAG_ENTERED")
DragEvent.ACTION_DRAG_ENDED -> Log.d(TAG, "DragEvent.ACTION_DRAG_ENDED")
}
return true
}
})
}
class MyDragShadowBuilder(private var mView: View) :
View.DragShadowBuilder() {
override fun onProvideShadowMetrics(outShadowSize: Point?, outShadowTouchPoint: Point?) {
val width: Int = mView.width * 2
val height: Int = mView.height * 2
//拖動圖像的寬和高
outShadowSize?.set(width, height)
//手指在拖動圖像的位置 中點
outShadowTouchPoint?.set(width / 2, height / 2)
}
override fun onDrawShadow(canvas: Canvas) {
val width: Int = mView.width * 2
val height: Int = mView.height * 2
val image = ImageView(mView.context)
image.setImageResource(android.R.drawable.stat_notify_error)
image.layoutParams = FrameLayout.LayoutParams(width, height)
val frameLayout = FrameLayout(mView.context)
frameLayout.setBackgroundColor(
ContextCompat.getColor(
mView.context,
android.R.color.holo_green_light
)
)
frameLayout.addView(image)
frameLayout.measure(width, height)
frameLayout.layout(0, 0, width, height)
frameLayout.draw(canvas)
}
}
}
圖像隨著手指拖放滑動:
Android View拖拽/拖放DragAndDrop自定義View.DragShadowBuilder,Kotlin(2)-CSDN博客文章瀏覽閱讀54次。??Android DynamicGrid:拖曳交換位置Android DynamicGrid是一個第三方開源項目,DynamicGrid在github上的項目主頁是:https://github.com/askerov/DynamicGrid它實現(xiàn)在一個網(wǎng)格布局內,拖曳任意子view實現(xiàn)動態(tài)的交換位置,這很類似手機的桌面,手機桌面的圖標,均可自由拖曳實現(xiàn)擺放位置的交換,如動圖所示:_android 拖拽交換位置。Android View拖拽startDragAndDrop,Kotlin-CSDN博客。https://blog.csdn.net/zhangphil/article/details/134008458文章來源:http://www.zghlxwxcb.cn/news/detail-719675.html
Android View拖拽startDragAndDrop,Kotlin-CSDN博客一個Android手勢縮放圖片的工具類;??Android DynamicGrid:拖曳交換位置Android DynamicGrid是一個第三方開源項目,DynamicGrid在github上的項目主頁是:https://github.com/askerov/DynamicGrid它實現(xiàn)在一個網(wǎng)格布局內,拖曳任意子view實現(xiàn)動態(tài)的交換位置,這很類似手機的桌面,手機桌面的圖標,均可自由拖曳實現(xiàn)擺放位置的交換,如動圖所示:_android 拖拽交換位置。但是還有一些遺漏問題尚未解決:垂直方向的拖曳。https://blog.csdn.net/zhangphil/article/details/133994955文章來源地址http://www.zghlxwxcb.cn/news/detail-719675.html
到了這里,關于Android拖放startDragAndDrop拖拽onDrawShadow動態(tài)添加View,Kotlin(3)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!