如何将View添加到Android XML布局

5

我有一个包含所有按钮和图片的XML布局,我想在布局顶部放置一个移动的云。因此,我创建了一个视图并让我的云移动,但是我无法将视图与布局链接起来。以下是我的视图代码:

public class CloudView extends View {

Bitmap cloud;
int ChangingX;


public CloudView(Context context) {
    // TODO Auto-generated constructor stub
    super(context);
    cloud = BitmapFactory.decodeResource(getResources(), R.drawable.cloud);
    ChangingX = 50;

}

@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    canvas.drawBitmap(cloud, ChangingX , 50, null);
    if (ChangingX < canvas.getWidth())
        ChangingX += 2;
    else
        ChangingX = 50;
    invalidate();
}

}

以下是我的MainActivity代码:

public class MainActivity extends Activity {

CloudView myView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    myView = new CloudView(this);
    setContentView(myView);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

 }

我在安卓动画方面还是新手,您能详细解释一下如何将视图与布局链接吗?如果无法工作,除了View之外,还有哪些类可以使用。

感谢您的时间和考虑。对我的糟糕英语表示抱歉。


使用布局填充器添加新视图。 - URAndroid
请问您能否用代码演示如何使用Inflater,因为我以前从未使用过它。 - Coderji
请查看下面的答案。 - URAndroid
2个回答

2

这里有一个与Android开发相关的链接,可能对你有用。

定义自定义属性

如何定义属性:

要定义自定义属性,请将资源添加到您的项目中。通常将这些资源放入res/values/attrs.xml文件中。以下是attrs.xml文件的示例:

<resources>
   <declare-styleable name="PieChart">
       <attr name="showText" format="boolean" />
       <attr name="labelPosition" format="enum">
           <enum name="left" value="0"/>
           <enum name="right" value="1"/>
       </attr>
   </declare-styleable>
</resources>

如何在XML中使用:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews">
 <com.example.customviews.charting.PieChart
     custom:showText="true"
     custom:labelPosition="left" />
</LinearLayout>

请阅读以下详细内容。


2
请使用以下内容:
View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.activity_my_vault, null,false);
        this.addContentView(viewToLoad);

我需要将这个添加到MainActivity还是View activity中? - Coderji
你的View Activity在哪里?你需要将它添加到Main Activity中。 - URAndroid
它给我一个指针为空异常。而且我的MainActivity继承自Activity,难道我不应该再有另一个类来继承View以进行动画,并导入onDraw方法吗?正如我之前提到的,我对此还很陌生,请耐心等待我理解。当我说我的View活动时,我是指CloudView。 - Coderji
更改要填充的布局的名称。不要使用相同的名称。 - URAndroid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接