1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

ImageView als Banner

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Panzenbaby, 05.05.2012.

  1. Panzenbaby, 05.05.2012 #1
    Panzenbaby

    Panzenbaby Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    05.05.2012
    Hi.

    Ich bin noch ziemlich unerfahren, was das programmieren von Android-Apps an geht. Ich habe erst diese Woche angefangen meine erste App zu schreiben.
    Ich hatte mir vorgestellt, dass ich in meiner MainActivity einen Banner mit verschiedenen Bildern laufen lasse.Das aktuelle Bild soll sich dann nach z.B. 5sec ändern. Nun hab ich mir gedacht ich nehme einfach eine ImageView und änder aller 5 sec. die Resource, welche in einer HashMap liegt und durch eine Zufallszahl bestimmt wird. Um das ganze zu testen hab ich mal 2 Resourcen eingefügt und das Ändern der Recource so verändert, dass jede Resource genau ein mal eingefügt wird. Allerdings wird das Bild in der App erst angezeigt, wenn das Ändern der Resource beendet wurde. Kann mir jemand sagen woran das liegt?

    Ich dachte erst, dass es daran liegt, dass ich es in die Methode onCreate() geschrieben habe und in dieser die View ja erst gezeichnet wird. Hab das dann noch in onStart() versucht aber das ging auch nicht.

    Wie gesagt ich bin noch ziemlich neu in diesem Gebiet und würde mich freuen, wenn mir jemand weiterhelfen könnte.

    Code:
    import java.util.HashMap;
    import java.util.Map;
    
    public class MainActivity extends Activity {
        /** Called when the activity is first created. */
        ImageView banner;
        Map<Integer,Integer> pictureList= new HashMap<Integer,Integer>();
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            banner = (ImageView) findViewById(R.id.banner);
            initiateList(pictureList);
            aktiviteBanner(banner, pictureList);
        }
    
        public void initiateList(Map<Integer, Integer> pictureList) {
            pictureList.put(0, R.drawable.ic_launcher);
            pictureList.put(1, R.drawable.pic1);        
        }
    
        public void aktiviteBanner(final ImageView banner,final Map<Integer,Integer> pictureList){
            int i=0,random;  
           
            while(i<=1){
                try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                        random = (int) Math.random() % 2;
                        banner.setImageResource(pictureList.get(i));
                        i++;
                    } 
        }
    
    }
     
  2. AquaBall, 05.05.2012 #2
    AquaBall

    AquaBall Android-Hilfe.de Mitglied

    Beiträge:
    121
    Erhaltene Danke:
    2
    Registriert seit:
    29.02.2012
    siehe: thread starten
     
  3. Panzenbaby, 06.05.2012 #3
    Panzenbaby

    Panzenbaby Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    05.05.2012
    Entschuldigung ich bin ein klein wenig verwirrt, da neue Themen in Foren ja auch Threds genannt werden (ist ja noch früh am Morgen). Hab ich jetzt beim Erstellen was blödes gemacht oder meindest du ich soll meinen Banner in einem extra Thread laufen lassen? :confused2:
     
  4. maniac103, 06.05.2012 #4
    maniac103

    maniac103 Android-Lexikon

    Beiträge:
    1,237
    Erhaltene Danke:
    1,157
    Registriert seit:
    24.01.2011
    Du solltest auf alle Fälle nicht deinen UI-Thread anhalten - genau das ist dein Problem. Lösung ist die Verwendung eines Timers oder des AlarmManagers.

    BTW, Member-Variablen brauchst du nicht als Funktionsparameter durch die Gegend zu schieben.

    Gesendet von meinem MB525 mit Tapatalk 2
     
  5. swordi, 06.05.2012 #5
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    nimm einen handler und schick ne msg mit

    handler.sendEmptyMessageDelayed(1, 5000);

    im handler wechselst dann das bild
     
  6. Panzenbaby, 06.05.2012 #6
    Panzenbaby

    Panzenbaby Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    05.05.2012
    Vielen Dank für die Antworten. Ich habe es jetzt mit einem extra Thread un einem Handler hin bekommen. Muss mich dann demnächst nur noch darum kümmern, dass ich den Thread zum richtigen Moment anhalte und wieder aktiviere. Hier noch mein Code falls jemand durch die SUFU darauf aufmerksam wird.

    Code:
    package mpeschut.imn.portal;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Random;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity {
        /** Called when the activity is first created. */
        ImageView banner;
        Map<Integer,Integer> pictureList= new HashMap<Integer,Integer>();
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            banner = (ImageView) findViewById(R.id.banner);
            
            initiateList(pictureList);
           
            aktiviteBanner(banner, pictureList);
        }
    
        public void initiateList(Map<Integer, Integer> pictureList) {
            pictureList.put(0, R.drawable.ic_launcher);
            pictureList.put(1, R.drawable.pic1);        
        }
    
        public void aktiviteBanner(final ImageView banner,final Map<Integer,Integer> pictureList){ 
            final Handler handler = new Handler();
            Thread thread = new Thread(new Runnable(){
                public void run(){
                    while(true){
                        try {
                            Thread.sleep(5000);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        handler.post(new Runnable() {
                            public void run(){
                                Random r = new Random();
                                int random = r.nextInt(2);
                                System.out.println(random);
                                banner.setImageResource(pictureList.get(random));
                            }
                        });
                    }
                }
            });    
            thread.start();
        }
    }
     
  7. qweqwe21, 02.03.2014 #7
    qweqwe21

    qweqwe21 Fortgeschrittenes Mitglied

    Beiträge:
    301
    Erhaltene Danke:
    8
    Registriert seit:
    20.03.2011
    Hi ich benutze auch diesen Code möchte aber nicht nach Zeit Limit das Bild wechseln sondern wenn die Antwort richtig ist, wird ein Quiz, was muss ich machen damit das klappt hier mein Code:

    Code:
    package com.example.quiz;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Random;
    
    import com.example.quiz.R;
    import com.example.quiz.R.drawable;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class Quiz extends Activity {
        ImageView banner;
        Map<Integer,Integer> pictureList= new HashMap<Integer,Integer>();
         private int currentQuestion;
         private String [] questions;
         private String [] answers;
         
         private Button answerButton;
         private Button questionButton;
         private TextView questionView;
         private TextView answerView;
         private EditText answerText;
         
         public void init() {
    
             questions = new String[] {
                     "50cent", "Albert Einstein", "Angela Merkel", "Barack Obama", "Bill Gates", "Cristiano Ronaldo", "Edward Snowden", "Elvis Presley", " George Clooney", "George W Bush", "Heidi Klum", "Ice Cube", "Jason Statham", "John F Kennedy", "Mark Zuckerberg", "Michael Jackson", "Pablo Escobar", "Robbie Williams", "Steve Jobs", "Vladimir Putin"};
             answers = new String[] {
                     "50cent", "Albert Einstein", "Angela Merkel", "Barack Obama", "Bill Gates", "Cristiano Ronaldo", "Edward Snowden", "Elvis Presley", " George Clooney", "George W Bush", "Heidi Klum", "Ice Cube", "Jason Statham", "John F Kennedy", "Mark Zuckerberg", "Michael Jackson", "Pablo Escobar", "Robbie Williams", "Steve Jobs", "Vladimir Putin"};
             currentQuestion = -1;
             answerButton = (Button)findViewById(R.id.AnswerButton);
             questionButton = (Button)findViewById(R.id.QuestionButton);
             questionView = (TextView)
                     findViewById(R.id.QuestionTextView);
             answerView = (TextView) findViewById(R.id.AnswerTextView);
             answerText = (EditText) findViewById(R.id.AnswerText);
             answerButton.setOnClickListener(new OnClickListener(){
                 @Override
                 public void onClick(View v) {
                     checkAnswer();
                 }});
                 
            questionButton.setOnClickListener(new OnClickListener(){
                 @Override
                 public void onClick(View v) {
                     showQuestion();
                 }});
         }
         
         public void showQuestion() {
                 currentQuestion++;
                 if(currentQuestion == questions.length)
                     currentQuestion = 0;
                 
                 questionView.setText(questions[currentQuestion]);
                 answerView.setText("");
                 answerText.setText("");
             }
         
             public boolean isCorrect(String answer) {
                 return (answer.equalsIgnoreCase(answers[currentQuestion]));
             }
             
             public void checkAnswer() {
                 String answer = answerText.getText().toString();
                 if(isCorrect(answer))
                     answerView.setText("You are right!");
                     
                 else
                     answerView.setText("That is wrong!");
             }
             
             
             
             
             
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_quiz);
            init();
            
             banner = (ImageView) findViewById(R.id.imageView1);
                
                initiateList(pictureList);
               
                aktiviteBanner(banner, pictureList);
        }
    
        public void initiateList(Map<Integer, Integer> pictureList) {
            pictureList.put(0, R.drawable.image_0);
            pictureList.put(2, R.drawable.image_2);  
            pictureList.put(3, R.drawable.image_3);  
            pictureList.put(4, R.drawable.image_4);  
            pictureList.put(5, R.drawable.image_5);  
            pictureList.put(6, R.drawable.image_6);  
            pictureList.put(7, R.drawable.image_7);  
            pictureList.put(8, R.drawable.image_8);  
            pictureList.put(9, R.drawable.image_9);  
            pictureList.put(10, R.drawable.image_10);  
            pictureList.put(11, R.drawable.image_11);  
            pictureList.put(12, R.drawable.image_12);  
            pictureList.put(13, R.drawable.image_13);  
            pictureList.put(14, R.drawable.image_14);  
            pictureList.put(15, R.drawable.image_15);  
            pictureList.put(16, R.drawable.image_16);  
            pictureList.put(17, R.drawable.image_17);  
            pictureList.put(18, R.drawable.image_18);  
            pictureList.put(19, R.drawable.image_19);  
            pictureList.put(20, R.drawable.image_20);  
        }
    
        public void aktiviteBanner(final ImageView banner,final Map<Integer,Integer> pictureList){ 
            final Handler handler = new Handler();
            Thread thread = new Thread(new Runnable(){
                public void run(){
                    while(true){
                        try {
    
                            Thread.sleep(4000);
    
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        handler.post(new Runnable() {
                            public void run(){
                                int j = -0;
                                banner.setImageResource(pictureList.get(j++));
                            }
                        });
                    }
                }
            });    
            thread.start();
        }
        
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.quiz, menu);
            return true;
        }
    
    }
    
    Bitte helft mir.
     
  8. Panzenbaby, 05.03.2014 #8
    Panzenbaby

    Panzenbaby Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    05.05.2012
    Ich weis garnicht warum du überhaupt meinen code verwendest. Das hat ja garnichts mit dem eigentlichen Gedanken zu tun.

    Du musst deine checkAnswer() Methode anpassen und darin die Resource wechseln (natürlich noch die richtige Resource ermitteln).

    Code:
             public void checkAnswer() {
                 String answer = answerText.getText().toString();
                 if(isCorrect(answer)) {
                     answerView.setText("You are right!");
                     banner.setImageResource(pictureList.get(i));
                 } else {
                     answerView.setText("That is wrong!");
                 }
             }
    Hoffe das hilft dir weiter. VG
     
  9. qweqwe21, 05.03.2014 #9
    qweqwe21

    qweqwe21 Fortgeschrittenes Mitglied

    Beiträge:
    301
    Erhaltene Danke:
    8
    Registriert seit:
    20.03.2011
    Hi danke hab es schon selber gelöst,
    ich verändere einfach die source vom ImageView
     

Diese Seite empfehlen