| |||||||
Das Thema "extends view + onDraw() + listener" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
![]() |
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Android-Hilfe.de Mitglied Modell: eclipse android emulator Registriert seit: 02.05.2010
Beiträge: 76
Abgegebene Danke: 15
Erhielt 0 Danke für 0 Beiträge
| leider komme ich gerade nicht weiter und hoffe Jemand kann mir weiter helfen. Ich habe zwei Klassen, eine Klasse1 extend Activity und eine Klasse2 extends View. In der Klasse1 erstelle ich mir eine Instanz der Klasse2 und hänge diese im einem linearen layout dran. Code: MyDrawableView mCustomDrawableView = new MyDrawableView(this);
((LinearLayout)findViewById(R.id.layout3)).addView(mCustomDrawableView); Code: @Override
protected void onDraw(Canvas canvas)
{
///getValue of textview
velocityValue = (TextView)findViewById(R.id.EditTextValue);
//_speed = Integer.parseInt(velocityValue.getText().toString());
myImage.setBounds(x, y, x + width, y + height);
x +=2; //x+=speed;
// mDrawable.draw(canvas);
//myImage.setBounds(x + _speed , y, x + width, y + height);
myImage.draw(canvas);
invalidate();
} LG Jim |
| | |
| | #2 (permalink) |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.461
Abgegebene Danke: 117
Erhielt 175 Danke für 165 Beiträge
|
Eigentlich sollte die Activity den Wert des TextViews an deinen eigenen View übergeben. Sprich Listener an den TextView und bei Änderungen an deinen MyDrawableView übergeben.
|
| | |
| | #3 (permalink) |
| Android-Hilfe.de Mitglied Modell: eclipse android emulator Registriert seit: 02.05.2010
Beiträge: 76
Abgegebene Danke: 15
Erhielt 0 Danke für 0 Beiträge
|
hallo, genau diesen Plan hatte ich vorher verfolgt. mCustomDrawableView.setSpeed(velocity); Den Listener habe ich wie folgt in der extends activity implementiert Code:
inputValue.setOnEditorActionListener(new OnEditorActionListener()
{
public boolean onEditorAction(TextView v, int actionId, KeyEventevent)
{
if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)
{
velocity = Integer.parseInt(inputValue.getText().toString());
///set velocity to drawableObjekt
mCustomDrawableView.setSpeed(velocity);
///Textview for Inputvalue
TextView velocityValue = (TextView)findViewById(R.id.EditTextValue);
velocityValue.setText( velocity + "ms");
}
return false;
}
}); Bei der Variante wollte der Compiler das ich die velocity final mache. Liegt es daran das ich als Listener eine anonyme Adapterklasse benutze? Ist auch mein erster Einsatz mit Listener und Android und ich verstehe viele Sachen noch nicht. wie sollte es aussehen? bzw. wonach sollte ich suchen? LG TIM |
| | |
| | #4 (permalink) |
| Android Guru Modell: Samsung Galaxy S (I9000) Registriert seit: 21.12.2009
Beiträge: 2.522
Abgegebene Danke: 73
Erhielt 495 Danke für 286 Beiträge
|
Poste doch mal den Fehlercode... (Logcat) btw: Wenn in dem EditText nichts drin ist, wirft das einen Fehler aus. Man kann das umgehen indem man das mit einer try/catch Anweisung umgibt. Integer.parseInt(velocityValue.getText().toString( ));
__________________ Meine Apps: GTalk Widget free Filehosting mit direkt download links & ohne werbung Geändert von Fr4gg0r (19.05.2010 um 01:49 Uhr) |
| | |
| Folgender Benutzer bedankt sich bei Fr4gg0r für diesen Beitrag: | jim (19.05.2010) |
| | #5 (permalink) | |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.461
Abgegebene Danke: 117
Erhielt 175 Danke für 165 Beiträge
| Zitat:
Du kannst in einer anonymen Klasse nur auf final, Klassen- oder Objektvariablen zugreifen. | |
| | |
| | #6 (permalink) | |
| Android-Hilfe.de Mitglied Modell: eclipse android emulator Registriert seit: 02.05.2010
Beiträge: 76
Abgegebene Danke: 15
Erhielt 0 Danke für 0 Beiträge
|
nächster Versuch, laut dieser Seite gibt es drei Arten wie man Listener implementiert. Implementing Listeners in your Android/Java application | Tseng's dev blog Jetzt habe ich also die 2 Version mit implements OnEditorActionListener versucht. ![]() Wieder das Gleiche! Zitat:
Ich stell hier mal den Code vor bevor ich die dritte Variante probiere. Tut mir Leid wenn ich mich zu blöd anstellt, aber ich weis einfach nicht wie ich vorgehen soll. Code: package com.jb;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
public class MyDrawableView extends View
{
///Textview for Inputvalue
private TextView velocityValue;
private Drawable myImage;
private ShapeDrawable mDrawable;
int x = 0;
int y = 0;
int width = 100;
int height = 100;
int _speed =2;
EditText inputValue;
//////////////////////////////////////////////////////////////////////////////////////////
public MyDrawableView(Context context)
{
super(context );
///load picture
Resources res = context.getResources();
myImage = res.getDrawable(R.drawable.cabrio);
myImage.setBounds(x, y, x + width, y + height);
// mDrawable = new ShapeDrawable(new OvalShape());
// mDrawable.setBounds(x, y, x + width, y + height);
// mDrawable.getPaint().setColor(0xFF0000FF);
}
//////////////////////////////////////////////////////////////////////////////////////////
@Override
public void onDraw(Canvas canvas)
{
///moving
x += _speed;
if(x>=100 || x < 0)
_speed *= -1;
myImage.setBounds(x, y, x + width, y + height);
myImage.draw(canvas);
invalidate();
}
//////////////////////////////////////////////////////////////////////////////////////////
public void setSpeed(int speed)
{
_speed =speed;
}
} Code: package com.jb;
import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.view.KeyEvent;
import android.view.View;
import android.os.Bundle;
public class gravity_Game extends Activity implements OnEditorActionListener
{
// Declare our Views, so we can access them later
private EditText inputValuefromEdittext;
/////////////////////////////////////////////////////////////////////////////////////////////
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
///
inputValuefromEdittext = (EditText)findViewById(R.id.EditText01);
///add View to activity View
MyDrawableView mCustomDrawableView = new MyDrawableView(this);
((LinearLayout)findViewById(R.id.layout3)).addView(mCustomDrawableView);
////////////////////////////////////////////////////////////////////////////////////////////
// Set Click Listener
inputValuefromEdittext.setOnEditorActionListener(new OnEditorActionListener()
{
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)
{
//speed = getValue and cast to double
int speed = Integer.parseInt(inputValuefromEdittext.getText().toString());
//error-> mCustomDrawableView.setSpeed(speed);
///Textview for Inputvalue
TextView velocityValue = (TextView)findViewById(R.id.EditTextValue);
velocityValue.setText( speed + "ms");
}
return false;
}
});
//////////////////////////////////////////////////////////////////////////////////////////////
///spinner
Spinner s1 = (Spinner)findViewById(R.id.Planets);
ArrayAdapter<CharSequence> adapter =
ArrayAdapter.createFromResource(this,R.array.Planeten, android.R.layout.simple_spinner_item);
s1.setAdapter(adapter);
/////////////////////////////////////////////////////////////////////////////////////////////
}
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
// TODO Auto-generated method stub
return false;
}
} | |
| | |
| | #7 (permalink) |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.461
Abgegebene Danke: 117
Erhielt 175 Danke für 165 Beiträge
| Code: ////////////////////////////////////////////////////////////////////////////////////////////
// Set Click Listener
inputValuefromEdittext.setOnEditorActionListener(new OnEditorActionListener()
{
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)
{
//speed = getValue and cast to double
int speed = Integer.parseInt(inputValuefromEdittext.getText().toString());
//error-> mCustomDrawableView.setSpeed(speed);
///Textview for Inputvalue
TextView velocityValue = (TextView)findViewById(R.id.EditTextValue);
velocityValue.setText( speed + "ms");
}
return false;
}
}); Richtig wäre es mit implements so: Code: package com.jb;
import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.view.KeyEvent;
import android.view.View;
import android.os.Bundle;
public class gravity_Game extends Activity implements OnEditorActionListener
{
// Declare our Views, so we can access them later
private EditText inputValuefromEdittext;
/////////////////////////////////////////////////////////////////////////////////////////////
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
///
inputValuefromEdittext = (EditText)findViewById(R.id.EditText01);
///add View to activity View
MyDrawableView mCustomDrawableView = new MyDrawableView(this);
((LinearLayout)findViewById(R.id.layout3)).addView(mCustomDrawableView);
////////////////////////////////////////////////////////////////////////////////////////////
// Set Click Listener
inputValuefromEdittext.setOnEditorActionListener(this);
//////////////////////////////////////////////////////////////////////////////////////////////
///spinner
Spinner s1 = (Spinner)findViewById(R.id.Planets);
ArrayAdapter<CharSequence> adapter =
ArrayAdapter.createFromResource(this,R.array.Planeten, android.R.layout.simple_spinner_item);
s1.setAdapter(adapter);
/////////////////////////////////////////////////////////////////////////////////////////////
}
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)
{
//speed = getValue and cast to double
int speed = Integer.parseInt(inputValuefromEdittext.getText().toString());
//error-> mCustomDrawableView.setSpeed(speed);
///Textview for Inputvalue
TextView velocityValue = (TextView)findViewById(R.id.EditTextValue);
velocityValue.setText( speed + "ms");
}
return false;
}
} |
| | |
| Folgender Benutzer bedankt sich bei the_alien für diesen Beitrag: | jim (19.05.2010) |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Zoom in eigener View | Webster | Android App Entwicklung | 2 | 14.05.2010 15:45 |
| View repositionieren | Kritzli | Android App Entwicklung | 0 | 23.02.2010 15:29 |
| 360° View | Tim Posnien | Android App Entwicklung | 0 | 20.01.2010 15:46 |
| Street View | 2Stoned | Sonstige Apps & Widgets | 4 | 19.08.2009 12:28 |
| onCenterChanged Listener?? | siwica | Android App Entwicklung | 0 | 16.06.2009 21:16 |