Android 可拖拽的GridView效果實現, 長按可拖拽和item實時交換
在Android開發中,我們常常用到ListView和GridView,而有的時候系統的ListView,GridView並不能滿足我們的需求,所以我們需要自己定義一個ListView或者GridView,我的上一篇文章中就是自定義的一個左右滑動刪除item的例子,大家有興趣的可以去看看 Android 使用Scroller實現絢麗的ListView左右滑動刪除Item效果,今天這篇文章就給大家來自定義GridView的控制元件,GridView主要是來顯示網格的控制元件,在Android的開發中使用很普通,相對於TextView,Button這些控制元件來說要來的複雜些,今天給大家帶來長按GridView的item,然後將其拖拽其他item上面,使得GridView的item發生交換,比較典型的就是我們的Launcher,網上有很多關於GridView的拖動的Demo,但是大部分都是相同的,而且存在一些Bug,而且大部分都是點選GridView的item然後進行拖動,或者item之間不進行實時交換,今天給大家更加詳細的介紹GridView拖拽,並且將Demo做的更完美,大家更容易接受,也許很多人聽到這個感覺實現起來很複雜,就關掉的這篇文章,其實告訴大家,只要知道了思路就感覺一點都不復雜了,不信大家可以接著往下看看,首先還是跟大家說說實現的思路
- 根據手指按下的X,Y座標來獲取我們在GridView上面點選的item
- 手指按下的時候使用Handler和Runnable來實現一個定時器,假如定時時間為1000毫秒,在1000毫秒內,如果手指擡起了移除定時器,沒有擡起並且手指點選在GridView的item所在的區域,則表示我們長按了GridView的item
- 如果我們長按了item則隱藏item,然後使用WindowManager來新增一個item的映象在螢幕用來代替剛剛隱藏的item
- 當我們手指在螢幕移動的時候,更新item映象的位置,然後在根據我們移動的X,Y的座標來獲取移動到GridView的哪一個位置
- 到GridView的item過多的時候,可能一螢幕顯示不完,我們手指拖動item映象到螢幕下方,要觸發GridView想上滾動,同理,當我們手指拖動item映象到螢幕上面,觸發GridView向下滾動
- GridView交換資料,重新整理介面,移除item的映象
新建一個類DragGridView繼承GridView,先來看看DragGridView的程式碼,然後在根據程式碼進行相關的講解
- package com.example.draggridview;
- import android.app.Activity;
- import android.content.Context;
-
import
- import android.graphics.PixelFormat;
- import android.graphics.Rect;
- import android.os.Handler;
- import android.os.Vibrator;
- import android.util.AttributeSet;
- import android.view.Gravity;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.WindowManager;
- import android.widget.AdapterView;
- import android.widget.GridView;
- import android.widget.ImageView;
- /**
- * @blog http://blog.csdn.net/xiaanming
- *
- * @author xiaanming
- *
- */
- publicclass DragGridView extends GridView{
- /**
- * DragGridView的item長按響應的時間, 預設是1000毫秒,也可以自行設定
- */
- privatelong dragResponseMS = 1000;
- /**
- * 是否可以拖拽,預設不可以
- */
- privateboolean isDrag = false;
- privateint mDownX;
- privateint mDownY;
- privateint moveX;
- privateint moveY;
- /**
- * 正在拖拽的position
- */
- privateint mDragPosition;
- /**
- * 剛開始拖拽的item對應的View
- */
- private View mStartDragItemView = null;
- /**
- * 用於拖拽的映象,這裡直接用一個ImageView
- */
- private ImageView mDragImageView;
- /**
- * 震動器
- */
- private Vibrator mVibrator;
- private WindowManager mWindowManager;
- /**
- * item映象的佈局引數
- */
- private WindowManager.LayoutParams mWindowLayoutParams;
- /**
- * 我們拖拽的item對應的Bitmap
- */
- private Bitmap mDragBitmap;
- /**
- * 按下的點到所在item的上邊緣的距離
- */
- privateint mPoint2ItemTop ;
- /**
- * 按下的點到所在item的左邊緣的距離
- */
- privateint mPoint2ItemLeft;
- /**
- * DragGridView距離螢幕頂部的偏移量
- */
- privateint mOffset2Top;
- /**
- * DragGridView距離螢幕左邊的偏移量
- */
- privateint mOffset2Left;
- /**
- * 狀態列的高度
- */
- privateint mStatusHeight;
- /**
- * DragGridView自動向下滾動的邊界值
- */
- privateint mDownScrollBorder;
- /**
- * DragGridView自動向上滾動的邊界值
- */
- privateint mUpScrollBorder;
- /**
- * DragGridView自動滾動的速度
- */
- privatestaticfinalint speed = 20;
- /**
- * item發生變化回撥的介面
- */
- private OnChanageListener onChanageListener;
- public DragGridView(Context context) {
- this(context, null);
- }
- public DragGridView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
- public DragGridView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
-
相關推薦
Android 可拖拽的GridView效果實現, 長按可拖拽和item實時交換
在Android開發中,我們常常用到ListView和GridView,而有的時候系統的ListView,GridView並不能滿足我們的需求,所以我們需要自己定義一個ListView或者GridView,我的上一篇文章中就是自定義的一個左右滑動刪除item的例子,大家有興趣
Android 可拖拽的GridView效果實現, 長按可拖拽和item實時交換
在Android開發中,我們常常用到ListView和GridView,而有的時候系統的ListView,GridView並不能滿足我們的需求,所以我們需要自己定義一個ListView或者GridView,我的上一篇文章中就是自定義的一個左右滑動刪除item的例子
android自動化測試中實現長按並拖動
android應用自動化過程中,會遇見需要長按並拖動的場景,例如類似UC瀏覽器中,長按某個導航中的圖示,使其處於可移動狀態,然後再將其移動到另一個地方,與其它導航圖示換個位置,在robotium中有個drag(float fromX, float toX, float f
RecyclerView的Item點選事件,增加刪除Item瀑布流動畫效果,長按拖動Item,RecyclerView複雜佈局、實現新聞頻道選擇器
RecyclerView的Item點選事件的實現,增加和刪除Item使用瀑布流動畫效果,長按拖動Item,RecyclerView複雜佈局的實現使用、RecyclerView去實現今日頭條新聞頻道選擇器。 使用ItemTouchHelper實現Item的拖動交換,由於Recy
android launcher3拖拽事件響應解析長按事件處理
AndroidICS4.0版本的launcher拖拽的流程,基本和2.3的相似。就是比2.3寫的封裝的介面多了一些,比如刪除類的寫法就多了個類。等等。4.0的改變有一些,但是不是特別大。這個月一直在改動Launcher的縮圖的效果,4.0的縮圖的功能沒
android:多次點選效果實現
public class MainActivity extends AppCompatActivity{ private final static int COUNTS = 5;//點選次數 private final static long VALIDTIME = 1300;/
Android 卡片邊框模糊陰影效果實現
1. 使用<shape>標籤實現 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
通過DGUS觸控式螢幕實現長按、短按按鍵啟動不同功能的效果
DGUS中有一個功能,可能用的人不多,所以不太瞭解,叫“觸控式螢幕按壓狀態返回”。這個控制元件也是一個觸控控制元件,配合頁面上的按鈕來實現觸控功能。“觸控式螢幕按壓狀態返回”與普通的“基本觸控”的主要區別在於,它除了可以實現基本觸控的功能(按鍵效果,頁面切換)外,還可以判斷觸
在機頂盒應用上,如何實現長按,並可以持續操作的效果
專案需求:操作機頂盒應用上的虛擬方向鍵,可以控制攝像頭的上下左右移動,點選一下,響應一次調整攝像頭,這個容易實現;需求是需要長按某個虛擬鍵時,能持續調整攝像頭直到鬆開。 解決方法: 每個View有On
Android 動態Tab分頁效果實現
當前專案使用的是TabHost+Activity進行分頁,目前要做個報表功能,需要在一個Tab頁內進行Activity的切換。比方說我有4個Tab頁分別為Tab1,Tab2,Tab3,Tab4,現在的需求是需要將Tab1內的Activity動態切換。找了很多資料最終使用了ActivityGroup解
Android view滑動懸浮固定效果實現
1.背景 在專案開發過程中,有時候會碰到這樣的需求:在滑動的過程中,在某時要將子view固定在頂部(常見的是將介面中的tab在滑動到頂部的時候進行固定)。 之前寫過一篇滑動元件懸浮固定在頂部的部落格,但感覺還是有些複雜,因此就有了這次的實現。效果圖: 2.思路 (Coor
Android RecyclerView (四)初學,實現長按刪除一個Item.
在上一篇中,我學到了如何給RecyclerView新增Item監聽器,在這裡,我想做到類似於可以長按某個Item然後彈出一個選單,選擇刪除這個Item的功能。這裡的程式碼我們還是使用前面寫的程式碼. PopupMenu繫結一個menu然後進行顯示。 首先
h5頁面實現長按刪除的效果
直接貼上複製到編輯器中進行檢視效果 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatib
Android view滑動懸浮固定效果實現-踩坑記
android新特性:使用CollapsingToolbarLayout實現摺疊效果及問題解決[有比較嚴重的卡頓感]https://www.jianshu.com/p/485223349703CollapsingToolbarLayout有滑動摺疊有嚴重的卡頓,不順暢,實現一
android中RecyclerView控件實現長按彈出PopupMenu菜單功能
mage 有一個 手工 sim pat 創建 .get mco span 之前寫過一篇文章:android中實現簡單的聊天功能 現在是在之前功能的基礎上,添加一個長按聊天記錄,刪除對應聊天記錄的功能 RecyclerView控件,沒有對應的長按事件,我們需要自己手工添加
RecyclerView的item拖動排序效果實現和它的ItemTouchHelper詳解
recyclerview這個控制元件太強大了,自帶各種特效,很多高逼格效果需要我們自己簡單組合一下就呈現出來,比如拖動排序!它對拓展簡直是非常open(OCP原則),廢話不扯了,先看效果: 說明: 1.實現這個效果的核心類是:ItemTouchHelpe
Android中主流狀態列效果實現
Android在早期的系統版本中,狀態列是不支援修改的,所以開啟任何應用程式會發現頂部的狀態列始終是黑條。在Android 4.4(KitKat)之後,系統的狀態列開始支援開發者定製和修改,包括顯示或隱藏,更改顏色等(嗯,一定是抄襲ios的...),又在Android 5.
Android setOnCreateContextMenuListener實現長按ListItem彈出不同選單
前一段時間做專案需要做一個效果:一個ListActivity,長按不同的item彈出的選單不一樣;如下圖所示我們長按不同的item需要彈出不同標題的menu: 長按事件可以使用ListView的setOnItemLongClick函式進行關聯,但是在響應的onItemLongClick函式裡面
Android開發之ViewPager+ActionBar+Fragment實現響應式可滑動Tab
按照一般的思路,我們或許會這麼做:首先,使用getActionBar()方法獲得操作欄,然後我們將操作欄的導航模式設定為Tab,並新增一些Tab,然後實現TabListener介面;其次,我們將多個佈局通過Inflater()方法變成View,然後
Android廣告輪播圖效果實現
效果如下: 首先看下一下佈局檔案: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schem