【问题标题】:XML Drawable consisting of two images由两个图像组成的 XML Drawable
【发布时间】:2013-07-17 07:58:34
【问题描述】:

我正在尝试创建一个 XML Drawable,我将使用它来代替 OSMDroid 中的默认标记。
最终应该是这样的:

黑色部分将在创建标记时加载,因为每个标记都会有不同的图像。 (如果这很重要,这些将从数据库中加载)

我尝试创建一个 XML Drawable,它有点可以工作,但黑色部分似乎被缩放以适合图像,因此使标记只是一个黑色的大方块。 (没有黑色部分可以正常工作)

我当前的 XML:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@drawable/marker"/>         // main

    <item android:drawable="@drawable/markerfill" />    // black part

</layer-list>

我尝试对第二个项目使用秤,但当我查看秤时,我似乎无法为此使用秤。

我想要什么:
我将黑匣子加载到“主要”部分,必要时调整它的大小(同时保持比例)并从 Java-Code 更改它。 我将在 OSMDroid 上使用这个标记。

最好的方法是什么?

【问题讨论】:

    标签: android xml scale


    【解决方案1】:

    我想要什么:我将黑匣子加载到“主要”部分,如果 必要的(同时保持比例)并将其从 Java 代码。我将在 OSMDroid 上使用这个标记。

    如果第一层图像在使用时不会调整大小/缩放(我不知道 OSMDroid 如何管理该标记),那么您可以使用LayerDrawable 的当前方法并将动态图像“放置”为@987654321 @:

    public Drawable makeBasicMarker(Bitmap bitmap) {
            Drawable[] layers = new Drawable[2];
            layers[0] = new BitmapDrawable(getResources(),
                    BitmapFactory.decodeResource(getResources(), R.drawable.marker));
            layers[1] = new BitmapDrawable(getResources(), bitmap);
            LayerDrawable ld = new LayerDrawable(layers);
            ld.setLayerInset(1, xx, xx, xx, xx); // xx would be the values needed so bitmap ends in the upper part of the image
            return ld;
        }
    

    如果图像被缩放,那么您需要自己制作Drawable 并自己绘制零件并适当放置它们。

    【讨论】:

      【解决方案2】:

      像这样试一试: 1.用第一个可绘制对象定义一个视图; 2.用drawBitmap()方法绘制第二个item 3.调用postInvalidate()方法重绘。

      【讨论】:

      • 你能给我一个例子/链接怎么做2吗?
      【解决方案3】:

      在mBG上画mBar,指的是那些:

      void onDraw(final Canvas canvas) {

      super.onDraw(canvas);
      
      float zoomX = mWidth / (float) mBG.getWidth();
      float zoomY = mHeight / (float) mBG.getHeight();
      
      canvas.drawBitmap(mBG, 0, 0, null);
      
      canvas.drawBitmap(mBG, new Rect(0, 0, mBG.getWidth(), mBG.getHeight()),
          new RectF(0, 0, mWidth, mHeight), null);
      
      ....
      canvas.drawBitmap(mBar, new Rect(0, 0, (int) w, (int) h), new RectF(
          X_LOCATION * zoomX, Y_LOCATION * zoomY, (X_LOCATION + w)
              * zoomX, (Y_LOCATION + h) * zoomY), null);
      
      }
      

      【讨论】:

      • 看起来不错,但我该放在哪里呢? (整个onDraw) 在绘制地图的类中? (=使用标记的地方)
      • 放到mapviewer类中
      • 我将它放入显示地图的 Activity 中,但出现此错误:“方法 onDraw(Canvas) 未定义类型 Activity”
      • onDraw(Canvas) 在视图中定义,类型如View、ImageView等
      • 所以我需要覆盖我的地图的默认 onDraw,对吧?我该怎么做,因为 MapView 是在 xml 中创建的?
      猜你喜欢
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 2015-11-07
      • 2020-05-11
      • 2012-01-17
      相关资源
      最近更新 更多