【问题标题】:Adding Views to FrameLayout - Xamarin, Android, Monodroid向 FrameLayout 添加视图 - Xamarin、Android、Monodroid
【发布时间】:2014-09-17 22:34:44
【问题描述】:

如何将视图添加到 FrameLayout。我希望能够从自定义视图类创建一个新视图并将其添加到 FrameLayout。自定义视图将有一个 OnDraw() 方法,该方法将与特定的可绘制/位图相关联。

我希望能够在图片上绘图,但我似乎无法让我的布局/视图正常工作。

我是否正确地将 ImageView 添加到我的 FrameLayout 中?

protected override void OnCreate (Bundle savedInstanceState)
    {
        base.OnCreate (savedInstanceState);
        this.image = new ImageView (this);
        //image = FindViewById<ImageView> (Resource.Id.imageView1);
        //this.image.SetScaleType (ImageView.ScaleType.CenterInside);
        //SetContentView (this.image, new ViewGroup.LayoutParams (ViewGroup.LayoutParams.FillParent, ViewGroup.LayoutParams.FillParent));
        FrameLayout m_Layout = FindViewById<FrameLayout>(Resource.Id.frameLayout1);
        //m_Layout.AddView (image);
        SetContentView (m_Layout);

        this.path = (savedInstanceState ?? Intent.Extras).GetString ("path");
        Title = System.IO.Path.GetFileName (this.path);

        Cleanup();
        DecodeBitmapAsync (path, 400, 400).ContinueWith (t => {
            image = FindViewById<ImageView>(Resource.Id.imageView1);
            image.SetImageBitmap (this.bitmap = t.Result);
        }, TaskScheduler.FromCurrentSynchronizationContext());
    }

XML

    <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:p1="http://schemas.android.com/apk/res/android"
    p1:minWidth="25px"
    p1:minHeight="25px"
    p1:layout_width="match_parent"
    p1:layout_height="match_parent"
    p1:id="@+id/frameLayout1">
    <ImageView
        p1:src="@android:drawable/ic_menu_gallery"
        p1:layout_width="match_parent"
        p1:layout_height="match_parent"
        p1:id="@+id/imageView1" />
</FrameLayout>

【问题讨论】:

    标签: android xamarin xamarin.android


    【解决方案1】:

    您没有将图像添加到FrameLayout。您已接近注释掉的行,但您需要在您创建的新 ImageView 上设置 LayoutParameters。所以在你打电话给SetContentView(m_Layout) 之后是这样的。

    this.image = new ImageView(this);
    this.image.LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent);
    m_Layout.AddView(this.image);
    

    现在您应该可以设置this.image 位图并让它出现在屏幕上。

    【讨论】:

    • 我可以继续在布局中添加更多图像视图吗?也许能够移动它们并将它们重叠在以前的图像视图上?还是会像在他们有预定义区域的地方进行布局和 android 布局?
    • 是的,FrameLayout 将其子级堆叠在一起。因此,您可以继续致电mLayout.AddView(imageview); 获取您想要的任意数量的图像。至于移动它们,您可能需要将 RelativeLayout 作为 FrameLayout 的子级,然后将 ImageView LayoutParameters 设置为您希望 ImageView 进入 RelativeLayout 的任何位置。
    • 在动态添加新布局时应该调用什么来更新屏幕?我应该继续调用 setContentView() 吗?
    • 如果您想继续在屏幕上添加叠加图像,您可以继续致电m_Layout.AddView(imageview);。这将保持将孩子堆叠在一起。否则,调用SetContentView() 会重置整个布局。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多