0

i have a few pages realized with a PagerAdapter and within that some LinearLayouts, which have some ImageButtons.

My Issue:

i want to get the imagebuttons from all the layouts from my pages on app-start, get the size of them and to resize the images to fill the imagebuttons. Gettting the images and rescaling them works fine, BUT if i do this at the function "onWindowFocusChanged" it only works on the first two pages. The ImageButtons on the third page until the last page are just gone. I assume the problem is that either these pages OR the linear-layouts OR the ImageButtons on these pages are not drawn yet so that it doesnt work.

To prove this i assigned a on-click listener to one of these buttons and do my calculation then and not already at onWindowFocusChanged. This has the same effect, BUT if i click the button after i have wiped over all pages it works on all pages.

Question: how can i make it work on startup for all pages OR without having to wipe over all pages first?

thx for any help in advance!

here is my code:

layout-portrait file:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/table1"
android:background="@drawable/shape" 
android:gravity="center"
>

<!-- Row 1-->

<LinearLayout
        android:layout_width="fill_parent"
        android:orientation="horizontal"
        android:layout_height="fill_parent" 
        android:layout_weight="1"
        android:gravity="center">

    <LinearLayout
            android:id="@+id/layout11"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"  
            android:layout_weight="1"
            android:background="@drawable/shape" >

         <ImageButton
            android:id="@+id/imageButton1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:src="@drawable/ic_launcher" />
    </LinearLayout>

    <LinearLayout
            android:id="@+id/layout12"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
            android:layout_weight="1"
            android:background="@drawable/shape" >

         <ImageButton
            android:id="@+id/imageButton2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
            android:src="@drawable/ic_launcher" />
    </LinearLayout>

</LinearLayout>

layout-landscape file:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/table1"
android:background="@drawable/shape" 
android:gravity="center"
>


<LinearLayout
        android:layout_width="fill_parent"
        android:orientation="horizontal"
        android:layout_height="fill_parent" 
        android:layout_weight="1"
        android:gravity="center">

    <LinearLayout
            android:id="@+id/layout11"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"  
            android:layout_weight="1"
            android:background="@drawable/shape" >

         <ImageButton
            android:id="@+id/imageButton1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:src="@drawable/ic_launcher" />
    </LinearLayout>

    <LinearLayout
            android:id="@+id/layout12"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
            android:layout_weight="1"
            android:background="@drawable/shape" >

         <ImageButton
            android:id="@+id/imageButton2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
            android:src="@drawable/ic_launcher" />
    </LinearLayout>


</LinearLayout>

MyPageAdapter-class:

   package com.example.Pagercheck;

import java.util.List;

import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;

public class MyPageAdapter extends PagerAdapter 
{
     List<View> pages = null;
    public MyPageAdapter(List<View> pages) 
    {
        this.pages = pages;
     }


    @Override
    public int getCount() 
    {
        return pages.size();

    }

    @Override
    public boolean isViewFromObject(View view, Object object) 
    {
        return view.equals(object);
    }


    @Override
    public Object instantiateItem(View collection, int position)
    {
        View v = pages.get(position);
        ((ViewPager) collection).addView(v, 0);
        return v;
    }

    @Override
    public void destroyItem(View collection, int position, Object view)
    {
        ((ViewPager) collection).removeView((View) view);
    }




    @Override
    public void finishUpdate(View arg0) {
    }

    @Override
    public void startUpdate(View arg0) {
    }


}

My MainActivity-Class:

    package com.example.Pagercheck;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.SimpleOnPageChangeListener;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewGroup.MarginLayoutParams;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity  implements OnClickListener
{
    private List<View> pages;
    private MyPageAdapter pagerAdapter;
    private ViewPager viewPager;
    private static Context context; //member zum speichern für context für andere Klassen
    public static Context getContext(){ return context;}    //context für andere Klassen zugänglich machen
    //private Button btn1;


    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        context = this; //context in member speichern

        LayoutInflater inflater = LayoutInflater.from(this);
        pages = new ArrayList<View>();

        View page = inflater.inflate(R.layout.page, null);                              
        pages.add(page);

        page = inflater.inflate(R.layout.page, null);
        pages.add(page);

        page = inflater.inflate(R.layout.page, null);
        pages.add(page);

        page = inflater.inflate(R.layout.page, null);
        pages.add(page);

        page = inflater.inflate(R.layout.page, null);
        pages.add(page);


        pagerAdapter = new MyPageAdapter(pages);
        viewPager = new ViewPager(this);
        viewPager.setAdapter(pagerAdapter);
        viewPager.setCurrentItem(0);    

        setContentView(viewPager);      

        for (int i_page=0;i_page<pages.size();i_page++)
        {
            //Drag-Listener auf ImageButtons:
            pages.get(i_page).findViewById(R.id.imageButton1).setOnLongClickListener(new MyLongClickListener());
            pages.get(i_page).findViewById(R.id.imageButton1).setOnClickListener(this);
            pages.get(i_page).findViewById(R.id.imageButton2).setOnLongClickListener(new MyLongClickListener());


            //Drag-Listener auf LinearLayouts:
            pages.get(i_page).findViewById(R.id.layout11).setOnDragListener(new MyDragListener());
            pages.get(i_page).findViewById(R.id.layout12).setOnDragListener(new MyDragListener());


        }

        super.onCreate(savedInstanceState);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {

        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    @Override
     public void onWindowFocusChanged(boolean hasFocus) 
    {
      // TODO Auto-generated method stub
      super.onWindowFocusChanged(hasFocus);

      //NOTE FOR STACKOVERFLOW
      //I COMMENTED THIS OUT SO THAT MY IMAGE BUTTONS DOESNT GET LOST AFTER PAGE 2 SO THAT I CAN TEST MY APP PROPERLY WITH ONCLICK:

//    Bitmap bmp_stift=BitmapFactory.decodeResource(getContext().getResources(), R.drawable.stift);
//      
//      for (int i_page=0;i_page<pages.size();i_page++)
//      { 
//  
//        ((ImageButton)pages.get(i_page).findViewById(R.id.imageButton1)).setImageBitmap(bmp_stift);
//        scalePictureToFitButtom((ImageButton)pages.get(i_page).findViewById(R.id.imageButton1));    
//        scalePictureToFitButtom((ImageButton)pages.get(i_page).findViewById(R.id.imageButton2));
//  
//      
//      }


     }

    public void scalePictureToFitButtom(ImageButton img_btn)
    {

        int width=img_btn.getWidth();
        int height=img_btn.getHeight();

        BitmapDrawable draw=(BitmapDrawable)img_btn.getDrawable();
        Bitmap bmp = ((BitmapDrawable)draw).getBitmap();       
        Bitmap resized = Bitmap.createScaledBitmap(bmp, width-40, height-40, true); //bissle schmaler und niedriger damit man noch den Klickeffekt sieht


        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        params.width=width;
        params.height=height;
        img_btn.setImageBitmap(resized);
        img_btn.setLayoutParams(params);
        pagerAdapter.notifyDataSetChanged();
    }


    @Override
    public void onClick(View view) 
    {
        Bitmap bmp_stift=BitmapFactory.decodeResource(getContext().getResources(), R.drawable.stift);

        for (int i_page=0;i_page<pages.size();i_page++)
        { 

          ((ImageButton)pages.get(i_page).findViewById(R.id.imageButton1)).setImageBitmap(bmp_stift);
          scalePictureToFitButtom((ImageButton)pages.get(i_page).findViewById(R.id.imageButton1));    
          scalePictureToFitButtom((ImageButton)pages.get(i_page).findViewById(R.id.imageButton2));


        }



         Toast einToast = Toast.makeText(view.getContext(), "clicked",  Toast.LENGTH_SHORT);
         einToast.show();

    }

}
treesoft
  • 295
  • 2
  • 14
  • 2 questions involve 2 different SO questions. That makes things simpler. – Mickäel A. Mar 07 '14 at 11:24
  • i guess you mean this ironically, so i edited my post a little. – treesoft Mar 07 '14 at 11:29
  • No I'm serious. If you have 2 different unrelated problems you should post 2 different questions. Otherwise this is a pain cause you can't quickly know which your code is related to your problem. – Mickäel A. Mar 07 '14 at 11:34

0 Answers0