`

增加Palette的拖放支持

    博客分类:
  • GEF
 
阅读更多

 

注意:这篇文章是从刘刚的博客中获取的,主要是考虑到自己碰到类似需求,所以直接拷贝过来了,当做资料积累。

 

默认情况下,GEF中要创建一个新的结点都是通点在Palette上选择一个结点,然后在Editor区域单击实现的。

 

也有一些是通过拖放Palette中的一个对象到Editor区域来实现的。

 

要实现一个拖放支持也是很容易的。GEF中默认实现了一组drag-drop listener用来支持拖放实现:

 

1。TemplateTransferDropTargetListener

 

     因为是要从palette上拖到Editor中,所以此监听事件显示是应该安放在Editor上,在GEF中就是GraphicalViewer,可以在initializeGraphicalViewer()方法中加上:

 

getGraphicalViewer().addDropTargetListener(new TemplateTransferDropTargetListener(
      getGraphicalViewer()));

 

2。TemplateTransferDragSourceListener

 

     显示此事件需要加在palette上,也就是PaletteViewer上,可以在initializePaletteViewer()方法中加上:

 

getPaletteViewer().addDragSourceListener(new TemplateTransferDragSourceListener(getPaletteViewer()));

 

回头再看一下我们对Palette上的Item的声明:

 

 CombinedTemplateCreationEntry(String label, String shortDesc,
  CreationFactory factory, ImageDescriptor iconSmall, ImageDescriptor iconLarge)

 

需要注意CombinedTemplateCreationEntry构造方法的选用。认为上述构造方法为默认选择,而CreationFactory类为SimpleFactory。

 

如果选择另一个构造方法:

 

CombinedTemplateCreationEntry(String label, String shortDesc, Object template,
  CreationFactory factory, ImageDescriptor iconSmall, ImageDescriptor iconLarge)

 

则我们需要注意:如果template和factory都是SimpleFactory则没有问题,因为默认的template就是SimpleFactory。否则我们需要根据自己的template值来得到对应的model,也就是要实现自己的CreationFactory。例如:

 

Java代码   收藏代码
  1. CombinedTemplateCreationEntry elementCreationEntry = new CombinedTemplateCreationEntry(  
  2.         "Element""Element type",ModelCreationFactory.ELEMENT_TYPE,new ModelCreationFactory(ModelCreationFactory.ELEMENT_TYPE), Activator  
  3.                 .getImageDescriptor("icons/element.png"), Activator  
  4.                 .getImageDescriptor("icons/element.png"));  
  5. CombinedTemplateCreationEntry attributeCreationEntry = new CombinedTemplateCreationEntry(  
  6.         "Attribute""Attribute type",ModelCreationFactory.ATTRIBUTE_TYPE, new ModelCreationFactory(ModelCreationFactory.ATTRIBUTE_TYPE), Activator  
  7.                 .getImageDescriptor("icons/attribute.png"), Activator  
  8.                 .getImageDescriptor("icons/attribute.png"));  

 

Java代码   收藏代码
  1. getGraphicalViewer().addDropTargetListener(new CustomTemplateTransferDropTargetListener(  
  2.                 getGraphicalViewer()));  

 

 

Java代码   收藏代码
  1. public class ModelCreationFactory implements CreationFactory {  
  2.   
  3.     private int objectType;  
  4.   
  5.     public static final int ELEMENT_TYPE = 0x01;  
  6.     public static final int ATTRIBUTE_TYPE = 0x02;  
  7.     public static final int ROOT_TYPE = 0x04;  
  8.   
  9.     public ModelCreationFactory(int objectType) {  
  10.         super();  
  11.         this.objectType = objectType;  
  12.     }  
  13.   
  14.     public Object getNewObject() {  
  15.         switch (objectType) {  
  16.         case ELEMENT_TYPE:  
  17.             return new ElementType();  
  18.         case ATTRIBUTE_TYPE:  
  19.             return new AttributeType();  
  20.         case ROOT_TYPE:  
  21.             return new RootType();  
  22.         default:  
  23.             break;  
  24.         }  
  25.         return null;  
  26.     }  
  27.   
  28.     public Object getObjectType() {  
  29.         return objectType;  
  30.     }  
  31.   
  32. }  

 

Java代码   收藏代码
  1. public class CustomTemplateTransferDropTargetListener extends  
  2.         TemplateTransferDropTargetListener {  
  3.   
  4.     public CustomTemplateTransferDropTargetListener(EditPartViewer viewer) {  
  5.         super(viewer);  
  6.     }  
  7.   
  8.     @Override  
  9.     protected CreationFactory getFactory(Object template) {  
  10.         return new ModelCreationFactory(((Integer)template).intValue());  
  11.     }  
  12.   
  13. }  

 

分享到:
评论

相关推荐

    明基Palette Master校正显示器软件-Palette Master Ultimate for Windows

    明基Palette Master支持硬件自动校准,简化校正并确实地产生正确的色彩结果。 Palette Master 可以用来校正显示器的色彩引擎,并完全支支持 X-Rite 色度计/分光仪。 除了可在短时间内提供可靠的校正外,Palette ...

    Android颜色拾取Palette

    "Android颜色拾取Palette"是一个强大的工具,它允许开发者从图像中提取主要和次要的颜色,并将这些颜色应用到应用程序的不同元素上,如状态栏、标题栏、ToolBar等,以实现更加美观且一致的视觉效果。这个功能尤其...

    Palettedemo

    《Android 5.x—Palette 深度解析与实践》 在Android开发中,我们经常需要处理图片资源,而Android 5.x引入了一个强大的新工具——Palette,它可以帮助开发者从图像中提取关键颜色,用于界面主题的动态设定,提供更...

    v7兼容包Palette的使用

    在Android开发中,`Palette`是Google在API Level 21(Android 5.0 Lollipop)引入的一个重要工具类,用于从Bitmap图像中提取出关键颜色,以便于实现与图片色调相协调的UI设计。`Palette`可以快速地分析图片,并从中...

    PaletteDemo

    【标题】"PaletteDemo"揭示了Android开发中的一个重要概念,即Palette库的使用。Palette是Android SDK中的一个工具,主要用于从图像中提取出主要的颜色,帮助开发者创建与图像色彩协调的UI界面。这个Demo旨在展示...

    android Palette和RoundedBitmapDrawable的实践

    在Android开发中,`Palette`和`RoundedBitmapDrawable`是两个非常实用的工具,尤其在处理图像资源和用户界面的视觉效果时。`Palette`主要用于从图片中提取颜色,以便自定义UI组件的颜色风格,而`...

    palette的jar包

    palette的jar包,放在libs目录里面,build path就可以使用了

    Android Material Design之Toolbar与Palette实践

    Android Studio是Google官方推荐的集成开发环境(IDE),对于实现Material Design提供了强大的支持。本文将深入探讨如何在Android应用中实现Material Design中的两个关键组件:Toolbar和Palette,并结合...

    RecyclerView+CardView+Palette Demo

    一个集成RecyclerView+CardView+Palette的Demo

    Palette实现原理(外送利用viewpager实现“无限循环”和ImageView的复用年终礼包)

    【标题】:Palette实现原理与ViewPager应用详解 在Android开发中,我们常常需要从图片中提取出主要的颜色,以适应界面的主题或者作为界面的色彩基础。这就是Android提供的Palette库的作用,它可以从Bitmap中提取出...

    利用Palette取得Bitmap图像中的主要色彩

    此外,Palette还支持回调机制,可以注册一个回调监听器,当生成过程完成时会得到通知: ```java palette.generate(new Palette.PaletteAsyncListener() { @Override public void onGenerated(Palette palette) { ...

    swift-iOS图片精确提取主色调算法iOS-Palette

    `swift-iOS图片精确提取主色调算法iOS-Palette`项目提供了一种高效的方法来实现这一功能,尤其适用于Swift开发者。这个项目的核心是通过算法分析图像像素,找出最能代表图片整体色彩的主色调。 iOS-Palette库使用了...

    PaletteDemo(安卓颜色拾取)

    此外,`Palette`库也支持自定义颜色采样和调整。例如,你可以通过设置`Swatch`的数量和色调范围来定制颜色提取过程: ```java Palette.Builder builder = Palette.from(bitmap); buildermaximumColorCount(6); // ...

    Android 5.X 新特性详解(一)——主题、Palette、阴影、着色和裁剪

    **阴影(Shadows)**是Material Design中的核心元素之一,它为UI组件增加了深度感。Android 5.X引入了`CardView`和`RecyclerView`等组件,它们自然地支持阴影效果。`CardView`通过设置`cardElevation`属性,可以为...

    调色板Palette使用

    `Palette`库是Android SDK提供的一种工具,用于从图像中提取关键颜色并将其应用于UI元素,从而实现与图像色彩协调一致的界面设计。本文将深入探讨如何使用`Palette`进行图片渲染,以及在实际应用中的技巧。 ### `...

    Android 5.0 新组件Demo

    这个"Android 5.0 新组件Demo"是针对这些改进的一个实践示例,让我们来深入探讨其中的核心组件:RecyclerView、CardView和Palette。 1. **RecyclerView**:RecyclerView是Android 5.0引入的替代ListView的视图组件...

    捕获颜色,输出RGB值palette.js.zip

    palette.js 是一个能够识别图像、图表、制图中色彩颜色元素的插件,还能输出颜色的 RGB 值。 标签:palette 分享 window._bd_share_config = ...

    android-support-v7-palette

    android-support-v7-palette 工具库

    android-support-v7-palette.jar

    android-support-v7-palette.jar

Global site tag (gtag.js) - Google Analytics