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 父类就会出来干预,因此会很小。当然可以在代码中假如判断,具体代码我就不写了,相信大家能自己搞明白


 

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

相关文章推荐

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

视音频编解码技术零基础学习方法

本文所说的视音频技术,指的是理论层面的视音频技术,并不涉及到编程相关的东西。   0.     生活中的视音频技术 平时我们打开电脑中自己存电影的目录的话,一般都会如下图所示,一大堆...

ImageView的src图片交换

activity_main.xml

Android拖拉控件的实现(类似抽屉)

对着移动应用的发展,对UI发现有很多的需求

android 拖拉控件

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

[ASP.NET-I] VS2008 ASP.NET网站 页面基础(控件拖拉)练习I

笔记源自视频。   [VS2008 数据库 IIS网站服务器] 首次启动VS2008时选中Visual C#进行设置。VS2008建立的网站项目拥有微型网站服务器的功能,项目目录就是一个Web站点。当...

SAP屏幕设计器专题:拖拉控件的强大(一)

很早以前,台湾总部公司IT开发了一个工厂日志的系统,目的是为了记录每天生产线的生产状况。我们厦门这边除了维护之外还要把数据从SAP中下载到本地服务器的MSSQL数据库里,然后在OA中进行签核动作。 ...

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

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

自定义运行时控件拖拉

  • 2013年03月21日 16:59
  • 6.88MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 拖拉控件遇到的问题
举报原因:
原因补充:

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