refresh linearlayout

  • Antworten:9
mcfly
  • Forum-Beiträge: 286

05.02.2011, 09:53:31 via Website

Hallo zusammen

wieder mal ein Problem :-)
Ich habe ein Linearlayout mit einer GalleryView und unten einer CustomView. Wenn ich zur Laufzeit die Höhe der GalleryView kleiner mache, rückt mir die CustomView nicht nach ( nach oben ) . Ich hab dann eine Lücke. ( Genau gesagt passiert mir das, wenn ich von Portrait auf Landscape switche und das neu starten der Activity verhindere. Ich versuch es selber zu handeln )

Hat mir da jemand einen Tip, wie ich die CustomView anschliessend an die GalleryView habe.

Grüsse

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

05.02.2011, 12:49:50 via Website

So aus dem bauch würde ich die onMeasure Methoden im CustomView dafür verantwortlich sehen, mein rat daher dort einige debug logs unterzubringen um zu sehen was passiert.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
mcfly
  • Forum-Beiträge: 286

05.02.2011, 21:03:26 via Website

Bin für jeden "aus dem Bauch" Hinweis dankbar, Danke. Ich habe keine onMeasure Methode, aber ich forsche in die Richtung weiter :-)
Danke und Gruss

Antworten
Gian U.
  • Forum-Beiträge: 117

06.02.2011, 11:03:51 via Website

Zeig doch mal den Code der CustomView. Ich verstehe nicht, wie das ohne onMeasure-Methode gehen soll...

Mnemono - Efficient learning!

Antworten
mcfly
  • Forum-Beiträge: 286

07.02.2011, 16:18:04 via App

// hier meine CustomView als Gerüst. Ich habe keine onMeasure Methode.  
Aber vielleicht liegts ja genau an dem ????

// Wenn ich eine Änderung habe und die CustomView updaten möchte habe  
ich das so gemacht:
mycustomview.invalidate();


// falls von Portrait nach Landscape gewechselt wird, handle ich den  
Wechsel selber mit:
// onConfigurationChanged ( siehe unten )

// In onConfigurationChanged rufe ich  
reinit_sizes_after_config_changed auf. ( siehe unten )

// Ungewünschtes Verhalten : Nachdem das alles durch ist, hängt meine  
Customview zuweit unten, weil ich die Höhe der galleryview
// kleiner gemacht habe. Die Customview behielt aber den Abstand vom  
oberen Rand.



private class myCustomView extends View implements OnGestureListener {


public myCustomView(Context context) {
super(context);
gestureDetector = new GestureDetector(this);

}

@Override
public boolean onScroll(MotionEvent event, MotionEvent e2,
float distanceX, float distanceY) {
return bmotion;
}
@Override
public boolean onDown(MotionEvent event) {
 }
public boolean onSingleTapUp(MotionEvent event) {

}

public boolean onFling(MotionEvent e1, MotionEvent e2,
final float velocityX, final float velocityY) {
}

public boolean onTouchEvent(MotionEvent event) {

}
protected void onDraw(Canvas canvas) {

// Zeichnet meine gesamte Customview
....
....

}
}


@Override
public void onConfigurationChanged(Configuration newConfig) {
 // ignore orientation/keyboard change
   reinit_sizes_after_config_changed();
   super.onConfigurationChanged(newConfig);
}



private void reinit_sizes_after_config_changed(){

DisplayMetrics metrics = new DisplayMetrics();
Display dsp=getWindowManager().getDefaultDisplay();
dsp.getMetrics(metrics);
   iScreenHeight = metrics.heightPixels;
   iScreenWidth = metrics.widthPixels;
   iOrientation=dsp.getOrientation();

iGalleryHeight = (int) (iScreenHeight / 10 * 2.1);
iCustomViewHeight = iScreenHeight / 10 * 8;
iTitleHeight = iScreenHeight / 25;
iToolbarHeight = iScreenHeight / 20;

// Ich verstehs nicht ( wie so vieles :-) ) ich fuege hier ein  
Framelayout dazu anstatt ein LinearLayout
g.setLayoutParams(new  
FrameLayout.LayoutParams(iScreenWidth,iGalleryHeight));
mycustomview.setLayoutParams(new  
FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, iCustomViewHeight));
//tm.setLayoutParams(new  
LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,  
iCustomViewHeight));

// Hole Bitmaps in den Speicher ( Buttons ) Scrollbuttons
if (sProduct.toLowerCase().contains("archos") &&  
sProduct.contains("70") &&  
iOrientation==Configuration.ORIENTATION_LANDSCAPE){
// Beim Archos Internet Tablet gibts ein Archos Menu, das die recht  
Seite etwas abdeckt
iAbstandvonrechts=50;
}else{
iAbstandvonrechts=25;
}
// tbl ist mein globales LinaerLayout, das die Gallery und meine  
CustomView enthält.
tbl.refreshDrawableState();
g.invalidate();
tm.invalidate();

}

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

07.02.2011, 16:27:49 via Website

Da du von View erbst hast du eine onMeasure. Das sind OOP Grundlagen an der Stelle.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
mcfly
  • Forum-Beiträge: 286

07.02.2011, 18:38:23 via Website

Das mit erben ( OOP ) verstehe ich im Prinzip schon :-) , nur ich sehe den Zusammenhang ( noch ) nicht.
Ich habe jetzt eine onMeasure Methode gemacht. Nur weiss ich nicht was tun ? Meine Customview ist immer noch nicht anschliessend zur Gallery.
Abstand zwischen Gallery und Customview ist etwa 1/5 des Bildschirms. Wenn ich die Apps in Landscape starte erscheint die Customview schön anschliessend der Gallery.

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

Danke trotzdem.

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

08.02.2011, 09:33:16 via Website

Ob Sie so dort einfach nur steht oder du sie nur implementierst um super aufzurufen macht keinen Sinn. Das sollte dir aber hoffentlich klar sein.
Jetzt kann du aber mal gucken was für parameter an deinen View übergeben werden und diese entsprechend Loggen, was ja meine anfänglicher
Hinweis war.Die Dokumentation der onMeasure Methode solltest du dir ebenfalls anschauen!

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
mcfly
  • Forum-Beiträge: 286

08.02.2011, 20:11:33 via App

ok jetzt weiss ich was Du meinst. ich werds probieren... Danke.

Antworten
mcfly
  • Forum-Beiträge: 286

15.02.2011, 20:12:13 via Website

Hallo zusammen

Ich hab "mein" Problem gefunden. Sorry, dass ich eure Zeit verschwendet habe. Ich bin ein Trottel !

Meine GalleryView war in einem Viewswitcher enthalten. Die 2. View im Viewswitcher war ein Bild. Die Höhe des Bildes war dann massgebend für die Darstellung in Landscape und Portrait. Darum hatte ich dann eine Lücke zwischen Gallery und meiner Customview in Landscape, weil im versteckten ja noch das Bild mit der Höhe von Portrait war.

Gruss

Antworten