栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android实现单页面浮层可拖动view的示例代码

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android实现单页面浮层可拖动view的示例代码

需求是需要在一个已经存在的页面添加一个可拖动的浮层广告。

使用到的技术:ViewDragHelper

效果如图:

封装好的类(继承自frameLayout)

import android.content.Context;
import android.support.annotation.AttrRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.widget.ViewDragHelper;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.frameLayout;

import java.util.ArrayList;


public class DragframeLayout extends frameLayout {

  String TAG = "DragframeLayout";
  ViewDragHelper dragHelper;
  ArrayList viewList;
  public DragframeLayout(@NonNull Context context) {
    this(context, null);
  }

  public DragframeLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
    this(context, attrs, 0);
  }

  public DragframeLayout(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    //第二步:创建存放View的集合
    viewList = new ArrayList<>();

    dragHelper = ViewDragHelper.create(this, 1.0f, new ViewDragHelper.Callback() {

      
      @Override
      public boolean tryCaptureView(View child, int pointerId) {
 return viewList.contains(child);
      }

      @Override
      public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) {
 super.onViewPositionChanged(changedView, left, top, dx, dy);
      }

      
      @Override
      public void onViewCaptured(View capturedChild, int activePointerId) {
 super.onViewCaptured(capturedChild, activePointerId);
 if (onDragDropListener != null) {
   onDragDropListener.onDragDrop(true);
 }
      }

      
      @Override
      public void onViewReleased(View releasedChild, float xvel, float yvel) {
 super.onViewReleased(releasedChild, xvel, yvel);
 if (onDragDropListener != null) {
   onDragDropListener.onDragDrop(false);
 }
      }

      
      @Override
      public int clampViewPositionHorizontal(View child, int left, int dx) {
 return left;
      }

      
      @Override
      public int clampViewPositionVertical(View child, int top, int dy) {
 return top;
      }
    });
  }

  
  public void addDragChildView(View view){
    viewList.add(view);
  }

  @Override
  public boolean onInterceptTouchEvent(MotionEvent ev) {
    //当手指抬起或事件取消的时候 就不拦截事件
    int actionMasked = ev.getActionMasked();
    if (actionMasked == MotionEvent.ACTION_CANCEL || actionMasked == MotionEvent.ACTION_UP) {
      return false;
    }
    return dragHelper.shouldInterceptTouchEvent(ev);
  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    dragHelper.processTouchEvent(event);
    return true;
  }
  public interface onDragDropListener {
    void onDragDrop(boolean captured);
  }

  private onDragDropListener onDragDropListener;

  public void setonDragDropListener(onDragDropListener onDragDropListener) {
    this.onDragDropListener = onDragDropListener;
  }
}

使用方法:

activity_main.xml









MainActivity.java类

public class MainActivity extends AppCompatActivity {

DragframeLayout m_dragframeLayout;
ImageView m_imageView1;
TextView m_textView1;
String TAG = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  m_dragframeLayout = (DragframeLayout) findViewById(R.id.df_content);
  m_imageView1 = (ImageView)findViewById(R.id.iv1);
  m_textView1 = (TextView) findViewById(R.id.tv1);
//   m_dragframeLayout.addDragChildView(m_imageView1);
  m_dragframeLayout.addDragChildView(m_textView1);//具体拖拽动作使用回调即可
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/157657.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号