Hallo werte Menschen,
ich stehe gerade bei meiner App ziemlich auf dem Schlauch und es will einfach nicht funktionieren.
Es gibt meine Activity (myActivity.java), die ein Toolbar hat (klappt) und noch eine View (ViewContainer.java) anzeigen soll, die ein Image und eine bestimmte Anzahl an Buttons darüber beinhaltet. Da es verschiedene Images sein können und auch verschiedene Buttons (Anzahl, Position, Text) habe ich den funktionierenden Code nun von der Activity in Container.java verschoben um es generisch in einer Klasse zu halten (der Code hat also schonmal funktioniert). Nun zeigt die Aktivity nicht als die Toolbar an. ich vermute ich muss die activity irgendwie aktualiseren, weiß aber nicht wie
Das ganze hat noch einige schönheitsfehler, wenn jemand dazu Tipps oder anregungen hat, nehme ich diese gerne entgegen. Sonst würde ich iterativ über den Code gehen, und probleme nach und nach generisch lösen.
Viele Grüße, D(r)eadlock
package com.example.sussan.training2.app;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.util.Log;
import android.widget.LinearLayout;
public class myActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// keine ahnung ob das hier sinn ergibt oder ich hier unnötig schachtel, secoundlayout ist ein knoten von main_layout
setContentView(R.layout.main_layout);
LinearLayout mainLayout = (LinearLayout)findViewById(R.id.secoundlayout);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
ViewContainer container = new ViewContainer(this);
int w =metrics.widthPixels;
int h= metrics.heightPixels;
//int p = mainLayout.getPaddingLeft();
// wäre schön gewesen, wenn ich "paddingleft" dynamisch rausgefunden hätte, funktioniert aber so nicht
int p = 24;
mainLayout.addView(container);
}
}
Alles anzeigen
package com.example.sussan.training2.app;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import org.w3c.dom.Document;
import java.util.ArrayList;
public class ViewContainer extends LinearLayout {
private int widthOfmyImage;
private int heightOfmyImage;
Context c;
/** Attribute werden von einer Funktion normalerweise gesetzt, die ein Textfile parsed **/
private Bitmap myImage;
ArrayList<myBttParser> allButtons;
public ViewContainer(Context context) {
super(context);
c = context;
}
public void init(int widthOfDisplay, int heightOfDisplay, int Margins)
{
initBitmap();
initButtons();
createLayoutOfmyImage(widthOfDisplay, heightOfDisplay, Margins);
}
// private void initBitmap(doc)
private void initBitmap()
{
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
myImage = BitmapFactory.decodeFile("/storage/emulated/0/Pictures/Test/quadrate.png", options);
}
// private void initButtons(doc)
private void initButtons()
{
myBttParser t = new myBttParser(100,100,"Hallo");
allButtons = new ArrayList<myBttParser>();
allButtons.add(t);
}
public void createLayoutOfmyImage(int widthOfDisplay, int heightOfDisplay, int Margins)
{
ImageView myImageView = new ImageView(c);
LinearLayout.LayoutParams vp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
myImageView.setLayoutParams(vp);
myImageView.setImageBitmap(myImage);
this.addView(myImageView);
/* Faktor um die position auf dem Image mit dem Ursrünglichen ausmaßen auf herunter zurechnen auf die jetztigen koordniaten,
der margin muss noch reingerechnet werden
und insgesamt bestimmt keine schöne lösung*/
int widthFactor = Math.round(widthOfDisplay / myImage.getHeight());
int heightFactor = Math.round(heightOfDisplay / myImage.getWidth());
for (myBttParser text : allButtons)
{
Button text_bnt = new Button(c);
text_bnt.setText(text.text);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.leftMargin = text.x*widthFactor;
params.rightMargin = text.y*heightFactor;
text_bnt.setLayoutParams(params);
this.addView(text_bnt);
}
}
class myBttParser
{
int x;
int y;
String text;
myBttParser(int px, int py, String ptext)
{
x = px;
y = py;
text = ptext;
}
}
}
Alles anzeigen