Android 拖拉控件遇到的问题

原创 2015年11月18日 21:21:02

第一次写博客,写得不好不要见怪,今天主要说说 拖拉控件,希望和大家交流下。微笑

废话不多说,进入正题。Android 提供了拖拉控件的接口,主要是  View.DragShadowBuilder类 和View.OnDragListener接口 。DragShadowBuilder类主要是关于阴影部分的描叙,而OnDragListener 接口可以监听拖动状态的。

一般的控件例如TextView,button,或者image里面都内置一个方法叫做startDragClipData data, DragShadowBuilder shadowBuilder, Object myLocalState, int flags)方法,第一个,第三个,第四个参数,我不清楚,假如有知道的朋友可以留言告知我下,小弟再次感谢可怜; 第二个参数是DragShadowBuilder对象。

代码:MyShadow shadow=new MyShadow(v);
  v.startDrag(null, shadow, null,0);
  img2.setVisibility(View.INVISIBLE);

MyShadow 是我重写DragShadowBuilder之后的类,当然直接用DragShadowBuilder也是可以的,不过重写的可以设置阴影部分的大小,以及显示出来的图片。重写DragShadowBuilder主要写俩个方法onProvideShadowMetrics和onDrawShadow 这俩个方法在这就不解释了。还要提醒一点在DragShadowBuilder类中可以通过getview()方法获取拖动的那个控件。

重写的MyShadow :

@Override
public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) {
// 视图的宽度
int width = getView().getWidth();
// 视图的高度
int height = getView().getHeight();
shadowidth = (int) (width * 2);
shadowheight = (int) (height * 2);
shadowSize.set(shadowidth, shadowheight);
shadowTouchPoint.set(45, 45);
}


@Override
public void onDrawShadow(Canvas canvas) {
ImageView img = (ImageView) getView();
Drawable drawable = img.getDrawable();
Bitmap b = ((BitmapDrawable) drawable).getBitmap();
newbitmap = b.createScaledBitmap(b, 108, 108, true);
canvas.drawBitmap(newbitmap, 0, 0, new Paint());
}

onProvideShadowMetrics方法中,可以获取阴影部分的宽高。shadowTouchPoint.set(45, 45)这个方法可以调整阴影部分的最开始显示的位置。例如图片在你手指左上。或者右下方,具体大家可以试试看。

  接着我们来看下MainActivity类,这个类要实现OnDragListener接口,这里我需要提醒下,我最开始做的时候使用 imageview.setOndragListener(this),结果发现如论如何不会触发这个方法,最后发现setOndragListener(this)前面的应该是拖动控件的布局,例如FrameLayout这样的布局,而不该是拖动的那个组件,其次是这个接口需要重写的那个方法最后返回值 true,具体为什么我也不知道 ,书上这样的写的,具体我也没试过。

还有一个地方需要说明,这是我在学习这节遇到的问题。就是Bitmap.createBitmap(width, height, config)这个方法不懂config参数的哥们可以查找下,具体我也是通过百度知道的,这里我不再啰嗦了。我主要想说这个方法:可以把Bitmap扩大,通过width,和height传入的参数可以改变。但是得到的这个 Bitmap 无法"显示"出来,
我做过一个实验,就是拿Bitmap.createBitmap(width, height, config)这个方法得到的bitmap,通过imageview加载结果显示不出来,这点也是我不明白的地方。

总结下,需要注意的地方:
1.setOndragListener(this)前面的应该是拖动控件的布局。
2.Bitmap.createBitmap(width, height, config)这个方法得到的bitmap,无法正常显示。
3.OnDragListener接口需要重写的那个方法最后返回值 true
项目的下载链接:http://pan.baidu.com/s/1gdtwQaR
项目其实有一个漏洞,就是当把imageview拖动在最最最右边的时候,图片会缩小,我想的话是因为padding值与右边界之间的距离太小,因此绘制imageview 父类就会出来干预,因此会很小。当然可以在代码中假如判断,具体代码我就不写了,相信大家能自己搞明白


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android自定义拖拉窗控件

在项目中有这样一个需求,一张全屏的地图,上面覆盖一个窗口显示路线列表,而这个窗口是个拖拉窗,可以全屏,半屏,和不显示,这个跟IOS7和android中的消息栏有点像,只不过可以拖到中间。Android...
  • dfqin
  • dfqin
  • 2013年12月11日 14:26
  • 2041

Android自定义拖拉窗控件

在项目中有这样一个需求,一张全屏的地图,上面覆盖一个窗口显示路线列表,而这个窗口是个拖拉窗,可以全屏,半屏,和不显示,这个跟IOS7和android中的消息栏有点像,只不过可以拖到中间。Android...
  • dfqin
  • dfqin
  • 2013年12月11日 14:26
  • 2041

【Android开发】图片拖拉功能的实现

这次记录的是实现Android图片用手拖拉的功能。 编译环境:eclipse Android版本4.0 创建工程过程略 实现图片在页面内的拖拉 原理图...
  • u013517797
  • u013517797
  • 2014年11月12日 20:16
  • 955

android 拖动控件例子

在百度新闻和网易新闻app里看到了自定义栏目的效果,它们都采用了拖动控件的方式来定制属于自己的栏目。想了会,没思路,google了一把 在android中,拖放控件的原理大致如下:重写某控件...
  • fengye810130
  • fengye810130
  • 2013年06月15日 16:12
  • 2221

android 拖拉控件

最近在研究一个类似屏保开锁的一个拖拉控件的activity,查网上的资料,在github找到一个很炫的,可是实在是不知道怎么用啊,所以就自己简单的做了一个,下面是源代码,很简单,视觉效果没那么好 ...
  • lshihao1
  • lshihao1
  • 2014年09月04日 17:52
  • 360

使用dragdealer.js实现拖拉效果

dragdealer.js拖拉效果的jquery插件。 content scroller h4 { margin: 30px 0 10px 0; color: #666; font-...
  • tuoxinquyu
  • tuoxinquyu
  • 2016年03月16日 16:03
  • 1670

android 拖拉控件

最近在研究一个类似屏保开锁的一个拖拉控件的activity,查网上的资料,在github找到一个很炫的,可是实在是不知道怎么用啊,所以就自己简单的做了一个,下面是源代码,很简单,视觉效果没那么好 这...
  • u010360371
  • u010360371
  • 2014年09月01日 21:40
  • 531

C# 实现拖拉控件改变位置与大小

前言:   很多时候我们需要在运行时,动态地改变控件的位置以及大小,以获得更好的布局。比如说实际项目中的可自定义的报表、可自定义的单据等诸如此类。它们有个特点就是允许客户或者二次开发人员设计它们...
  • hugo20
  • hugo20
  • 2016年05月30日 00:30
  • 4043

Android应用开发之图片拖拉和多点触摸缩放

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229         今天我们学习如何实现图片(理论上选取的图片实际尺寸应大于当...
  • leverage_1229
  • leverage_1229
  • 2013年06月03日 02:01
  • 3195

Android仿网易客户端实现抽屉式拖拉菜单界面

前面有写过一篇文章使用DrawerLayout实现Android仿网易客户端抽屉模式,昨天从群里看一哥们问抽屉式拖拉,从主界面的下方出现,而使用DrawerLayout实现的是覆盖掉主界面,今天我们就...
  • ElinaVampire
  • ElinaVampire
  • 2014年12月19日 09:55
  • 4488
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 拖拉控件遇到的问题
举报原因:
原因补充:

(最多只允许输入30个字)