ImageView als Banner

P

Panzenbaby

Neues Mitglied
0
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++;
                } 
    }

}
 
siehe: thread starten
 
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:
 
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
 
nimm einen handler und schick ne msg mit

handler.sendEmptyMessageDelayed(1, 5000);

im handler wechselst dann das bild
 
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();
    }
}
 
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.
 
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
 
Hi danke hab es schon selber gelöst,
ich verändere einfach die source vom ImageView
 

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
163
swa00
swa00
R
  • raller
Antworten
15
Aufrufe
547
DOT2010
DOT2010
S
Antworten
4
Aufrufe
994
Sempervivum
S
Zurück
Oben Unten