2017-01-03 2 views
0

Im довольно новый для xamarin.android, и у меня есть изображение в виде прокрутки, и я хочу увеличить его при щелчке. (отображать полное изображение onclick, например, на мобильном facebook), когда пользователь нажимает на изображение, которое я хочу открыть в полноэкранном режиме. Как это сделать?как показать полноэкранный просмотр изображения onlclick

ive сделал некоторые исследования и не смог найти полезные темы. Любая помощь была бы одобрена заранее.

Heres мой detailactivity класс

private ImageView mtimg0, mtimg1, mtimg2, mtimg3, mtimg4, mtimg5; 
protected override void OnCreate(Bundle savedInstanceState) 
{ 
     base.OnCreate(savedInstanceState); 
     SetContentView(Resource.Layout.detailLayout); 

     FindViews(); 


     Android.Content.Intent i = this.Intent; 
     string iname = i.Extras.GetString("MTNAME"); 
     int iimg0 = i.Extras.GetInt("IMG0"); 
     int iimg1 = i.Extras.GetInt("IMG1"); 
     int iimg2 = i.Extras.GetInt("IMG2"); 
     int iimg3 = i.Extras.GetInt("IMG3"); 
     int iimg4 = i.Extras.GetInt("IMG4"); 
     int iimg5 = i.Extras.GetInt("IMG5"); 

     mtimg0.SetImageResource(iimg0); 
     mtimg1.SetImageResource(iimg1); 
     mtimg2.SetImageResource(iimg2); 
     mtimg3.SetImageResource(iimg3); 
     mtimg4.SetImageResource(iimg4); 
     mtimg5.SetImageResource(iimg5); 
    } 

    private void FindViews() 
    { 
     tmtname = FindViewById<TextView>(Resource.Id.mtname); 
     mtimg0 = FindViewById<ImageView>(Resource.Id.mtimg00); 
     mtimg1 = FindViewById<ImageView>(Resource.Id.mtimg01); 
     mtimg2 = FindViewById<ImageView>(Resource.Id.mtimg02); 
     mtimg3 = FindViewById<ImageView>(Resource.Id.mtimg03); 
     mtimg4 = FindViewById<ImageView>(Resource.Id.mtimg04); 
     mtimg5 = FindViewById<ImageView>Resource.Id.mtimg05);    

    } 
} 

EDITED

вот пример пункта в моем списке зрения, где я получаю все мои образы

class MountainsData 
    { 
    public static List<Mountain> MountainList = new List<Mountain>() 
     { 
     new Mountain() 
      { 
       MtName = "ALTO PEAK", 
       Masl = 1332, 
       Difficulty = 6, 
       Island = 2, 
       MtImg00 = Resource.Drawable.altopeak, 
       MtImg01 = Resource.Drawable.altopeak1, 
       MtImg02 = Resource.Drawable.altopeak2, 
       MtImg03 = Resource.Drawable.altopeak3, 
       MtImg04 = Resource.Drawable.altopeak4, 
       Location = "ORMOC, LEYTE", 
       JumpOff ="Lake Danao National Park, Ormoc", 
       Description ="LLA: 11.1061 N, 124.7097 E, 1332 
      } 

и в моей просмотр списка. Вот как я передаю каждый элемент своей активности ... и чтобы получить его в своей подробной деятельности, я использую код abo ве (в классе detailactivity .. первый код выше в этом вопросе)

private List<Mountain> mMountains; 
    private void OpenDetailActivity(int pos) 
    { 
     mt = mMountains[pos]; 
     i = new Intent(this, typeof(DetailActivity)); 

     i.PutExtra("IMG0", mt.MtImg00); 
     i.PutExtra("IMG1", mt.MtImg01); 
     i.PutExtra("IMG2", mt.MtImg02); 
     i.PutExtra("IMG3", mt.MtImg03); 
     i.PutExtra("IMG4", mt.MtImg04); 
     i.PutExtra("IMG5", mt.MtImg05); 
     i.PutExtra("MTNAME", mt.MtName); 
     i.PutExtra("LOCATION", mt.Location); 
     i.PutExtra("JUMPOFF", mt.JumpOff); 
     i.PutExtra("DESCRIPTION", mt.Description); 
     i.PutExtra("BACKGROUND", mt.Background); 
     i.PutExtra("ITINERARY", mt.Itinerary); 
     i.PutExtra("PRACTICALITIES", mt.Practicalities); 
     i.PutExtra("ATTIRE", mt.Attire); 
     i.PutExtra("TTB", mt.Ttb); 

     StartActivity(i); 

    } 

, что я хочу, чтобы это произошло внутри detailactivity, когда я нажимаю ImageView .. отобразить его в полноэкранном режиме, но я не могу найти способ передать строку правильно .. заранее спасибо: D

+0

Возможный дубликат [Расширяя в ImageView на клик] (http://stackoverflow.com/ вопросы/22409920/expand-an-imageview-on-click) – Demitrian

+0

Или просто создайте новое действие для полноэкранного просмотра. Передайте imageurl или путь с целью нового действия. – user1519979

+0

Если вы не хотите покидать свою деятельность, вы также можете показать ее в фрагменте ... если вам нужно индивидуальное решение для вашего проекта поделиться тем, что вы сделали до сих пор :-) –

ответ

0

Это решение с DialogFragment:

Ваш fragment_dialog.axml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:minWidth="2000dp" 
    android:minHeight="2000dp"> 
    <ImageView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/img" 
     android:src="@drawable/aaa" 
     android:scaleType="fitCenter"/> 
</LinearLayout> 

Вашего MyDialogFragment.cs

public class MyDialogFragment : DialogFragment 
{ 
    private ImageView imgView; 
    static public MyDialogFragment newInstance() 
    { 
     MyDialogFragment f = new MyDialogFragment(); 
     return f; 
    } 

    public override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 
     SetStyle(DialogFragmentStyle.NoTitle, Android.Resource.Style.ThemeBlackNoTitleBarFullScreen); 
    } 

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     base.OnCreateView(inflater, container, savedInstanceState); 
     View v = inflater.Inflate(Resource.Layout.fragment_dialog, container, false); 

     imgView = v.FindViewById<ImageView>(Resource.Id.img); 
     //Get int and set it to the ImageView 
     int imgPassed = Arguments.GetInt("imgId"); 
     imgView.SetImageResource(imgPassed); 

     return v; 
    } 
} 

От вашего ItemSelected или щелчок

 FragmentTransaction ft = FragmentManager.BeginTransaction(); 
     DialogFragment newFragment = MyDialogFragment.newInstance(); 

     //Declare String and get the Id 
     string imgName = "bbb"; //Change with the name of the image you want to pass 
     int imgId = Resources.GetIdentifier(imgName, "drawable", PackageName); 

     //Pass it with the Bundle class 
     Bundle bundle = new Bundle(); 
     bundle.PutInt("imgId", imgId); 
     newFragment.Arguments = bundle; 

     //Show the Fragment 
     newFragment.Show(ft, "dialog"); 

EDIT: я использовал класс Bundle как один из возможных способов передачи данных от Мероприятия для фрагментов. Прекрасно работает для меня.

Другой способ иметь тот же результат просто использует другую активность и намерения, вы можете найти все, что вам нужно здесь: Passing Data Between Activities

+0

привет сэр ben/спасибо за ваш ответ .. это очень помогло .. вы можете показать мне, как передать строку из активности? потому что он, кажется, не получает правильные данные. –

+0

@KeithJustine Я отредактировал сообщение, если оно работает для вас, обязательно отметьте вопрос как ответ. Если вам нужна дополнительная помощь, дайте мне знать :-) –

+0

привет сэр ben извините за поздний ответ, только что вернулся из отпуска .. ваш ответ очень полезен, но у меня все еще есть проблема с передачей строки .. он, похоже, не получил правые данные .. "int iimg5 = i.Extras.GetInt (" IMG5 ");" эта строка кода - это то, как im передаёт строку из моего списка в детализированную активность. Просто интересно, как я могу передать ее в фрагменте диалога? –

Смежные вопросы