15 Mart 2018 Perşembe

Xamarin.Forms Android frame'e shadow vermece


Yeyy yine Xamarin'e uğramak nasip olduu ^^

Xamarin'in çok güzel bir platform olduğunu ama hiç hakkını veremediğimi düşünmüşümdür her zaman. Artık iş konusunda daha özgür bir alana sahip olduğum için yaptığım işlerin hakkını vermek istiyorum ve bu yüzden işler biraz daha yavaş çıkıyor. :) Deadline geçmediği sürece sıkıntı yok bence :))

Şimdi hızlıca yaşadığım frame sıkıntısını nasıl çözdüğümü anlatayım, malum deadline beklemez.

Sıkıntımız xamarin.forms'daki frame arkadaşının Android'de shadow vermiyor olmasıydı. .xml ler denedim, gradient'ler bilmem ne ler denedim ama istediğim sonuca ulaşamadım. Sonrasında ise .9.png uzantısını keşfettim.

Bu uzantıda bir gölge görseli oluşturdum ve frame'imin background resource'una verdim. Sonuç gayet güzel şimdilik.



.9.png uzantılı shadow u oluşturmak için kullandığım tool; 


Burada görselimi oluşturup dosyayı shadow.9.png ismi ile android drawable klasörünün altına ekledim ve aşağıdaki gibi kullandım;


using System;
using Android.Content;
using Android.Support.V4.View;
using ShadowFrame.Droid.Renderers;
using ShadowFrame.Renderers;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(ShadowedFrame), typeof(ShadowedFrameRenderer))]
namespace ShadowFrame.Droid.Renderers
{
    public class ShadowedFrameRenderer: FrameRenderer
    {
        public ShadowedFrameRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
        {
            base.OnElementChanged(e);

            if (e.NewElement != null)
            {
                //http://inloop.github.io/shadow4android/
                ViewGroup.SetBackgroundResource(Resource.Drawable.shadow);
            }
        }
    }
}

Öğrendiğim örnek;
https://stayrony.github.io/add-shadow-to-custom-shape-on-android/

Ayrıca çözüme ulaşmaya çalıştığım diğer yolda yani xml oluşturmaya çalıştığımda yine bayağı faydalandığım tool'u da eklemek isterim;


Daha güzel çözümleri öğretene hayır dememm