ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – 如何在布局上为ImageView对象的新副本充气?

2019-10-07 10:34:56  阅读:235  来源: 互联网

标签:android imageview coordinates inflate absolutelayout


我要做的是创建ImageView对象R.id.tile的N(在本例中为9)副本,将它们中的每一个放置在布局上的不同坐标上,并为每个坐标提供其自己的唯一标识符.

board_layout.xml:

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

    <LinearLayout
        android:id="@+id/topbar"
        ... >

        <ImageButton
            android:id="@+id/imagebutton"
            ... />

    </LinearLayout>

    <RelativeLayout
        android:id="@+id/board"
        android:layout_width="match_parent"
        android:layout_height="345dp"
        android:layout_centerVertical="true"
        android:background="@drawable/wwfboard" >

        <view class="languid.legend.xsolver.DrawView"
            android:id="@+id/myView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

        <ImageView
            android:id="@+id/tile"
            android:layout_width="21dp"
            android:layout_height="21dp"
            android:src="@drawable/tile" />
    </RelativeLayout>

</RelativeLayout>

BoardLayout.class:

@Override
protected void onCreate(Bundle savedInstance)
{   super.onCreate(savedInstance);
    setContentView(R.layout.board_layout);
    LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View[] tiles = new ImageView[9];
    entire_layout = (RelativeLayout)findViewById(R.layout.board_layout);


    for(int i = 0; i<tiles.length; i++){
        tiles[i] = (ImageView) inflater.inflate(R.layout.board_layout, null);
        tiles[i].setId(1000+i);
        params = new RelativeLayout.LayoutParams(-1, 345);
        params.leftMargin = 32*2*i;
        params.topMargin = 34*2*i;
        entire_layout.addView(tiles[i]);
    }
    ...

但是,我一直在最后一行得到“Source not found”错误:layout.addView(tiles [i]); ..
有什么想法吗?
(旁边问题:如果你正在使用坐标,那么RelativeLayout比AbsoluteLayout好吗?)

解决方法:

编辑:

首先使用一个具有您喜欢的属性的ImageView创建布局

例:

在res / layout / singleimage.xml中创建文件

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
           android:id="@+id/image2"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:src="@drawable/ic_launcher"
           android:contentDescription="Sample"/>

然后给ImageView充气以获得它的副本

View[] tiles = new ImageView[9];
// get reference to LayoutInflater
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

for(int i = 0; i<tiles.length; i++) {
    //Creating copy of imageview by inflating it
    ImageView image = (ImageView) inflater.inflate(R.layout.singleimage, null);
    tiles[i] = image;
    tiles[i].setId(i);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(-1, 345);
    params.leftMargin = 32*2*3;
    params.topMargin = 34*2*3;
    layout.addView(tiles[i]);
}

你在这里设置了id值

tiles[i].setId(i);  

但是你(错误地)试图从你的其他资源(你想要’克隆’)获得它:

layout.addView(tiles[i] = (ImageView) findViewById(R.id.tile)); // INCORRECT

相反,如上所述手动设置id,然后:

layout.addView(tiles[i]);

并且无需调用findViewById()

标签:android,imageview,coordinates,inflate,absolutelayout
来源: https://codeday.me/bug/20191007/1866428.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有