【问题标题】:How to draw ImageView on ImageView?如何在 ImageView 上绘制 ImageView?
【发布时间】:2013-12-31 15:08:48
【问题描述】:

我有一个 ImageView,我想在我的基础 ImageView 上动态地绘制另一个图像。

例如,在这张图片中,我有一棵树,我想画人的图片

有什么开始的建议吗?

是的,我的问题就像@Tsunaze 说的:

我有一棵树,我想把头放在上面,

【问题讨论】:

  • 快速提问,是否所有人物的图像都添加到单个图像中?
  • 您需要创建一个扩展视图的类,并重写 onDraw 方法,在这里您将拥有一个可以在其上绘制 imageViews 的画布。
  • @VenomVendor ,是的,全部添加到一个图像中。
  • @Tsunaze 有什么要开始的基本代码吗?
  • 我的理解是:他有一棵树,想把头放在上面,我的做法是将画布背景设置为树,并在上面绘制位图(代表头) 在某些位置 (x, y),他必须先获得窗口视图。

标签: android image imageview draw android-drawable


【解决方案1】:

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ImageView
    android:id="@+id/iv_tree"
    android:scaleType="fitXY"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:adjustViewBounds="true"
    android:src="@drawable/my_tree" />

</RelativeLayout>

MyView.java:

public MyView extends View{
 private Bitmap head_1, head_2;
 public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    this.context = context;
    init();
}
public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.context = context;
    init();
}
public MyView(Context context) {
    super(context);
    this.context = context;
    init();
}
    private void init(){
     head_1= BitmapFactory.decodeResource(context.getResources(), 
R.drawable.head_1); 
     head_2= BitmapFactory.decodeResource(context.getResources(), 
R.drawable.head_2);
    }

    @Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);       
    canvas.drawBitmap(head_1, coordinateX_head_1, coordinateY_head_1, null);
            canvas.drawBitmap(head_2, coordinateX_head_2, coordinateY_head_2, null);
}
  }

你可以选择你想要的坐标,你甚至可以使用canvas.getWidth()或者canvas.getHeight()这样的函数。把自己装扮成画家。祝你好运。

【讨论】:

  • 非常感谢。它有效。我必须进行调整(例如,将背景图像保留在我的主 ImageView - 树中)和“
  • 不客气,不久前我不得不做一些非常相似的事情,这是我第一次做这样的事情,我很高兴它有所帮助。
  • 100+。您如何看待使用“namespace.MyView”更改 ImageView?
  • 其实我想展示的是你没有义务在你的自定义视图中加载所有图像,例如基础是树,xml 代表自定义视图本身,现在如果你想调用它,你会使用“namespace.MyView”
【解决方案2】:

你要做的是创建一个从 ImageView 扩展的类,像往常一样设置你想要的默认参数并覆盖 on draw 方法,这个方法将使你有机会获得对画布的引用并绘制位图或几乎任何你想要的东西,但记得首先调用 super.onDraw 以保持你的默认配置并覆盖你的新图像。

有很多关于如何使用画布的教程,所以现在你有正确的方法可以采取,希望对你有所帮助。

问候

【讨论】:

    【解决方案3】:

    setBackgroundResource 到 ImageView 并在其上使用 setImageResource

    例如:

    imageView.setBackgroundResource(R.id.backgroundTree);
    imageView.setImageResource(R.id.allPeople);
    

    编辑:

    如果你想叠加多张图片,check this example.

    您也可以使用RelativeLayout 并以编程方式在其中添加ImageView

     <RelativeLayout>
       <ImageView/>
       <ImageView/>
       <ImageView/>
       <ImageView/>
     </RelativeLayout>
    

    【讨论】:

    • 嗯,我从 facebook 下载图像,我有 N imageView 添加到我的树中.. 你认为这是最好的方法吗?因为我需要绘制树的特定点。
    • 不,在这种情况下根本不是,所以我问你第二张图片是否是一张图片。
    • @alfo888_ibg 检查更新的答案。无需使用复杂的画布,而是使用LayerDrawable
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多