Android Development - Snippets: Unterschied zwischen den Versionen
Aus Wikizone
(→Events) |
(→Views) |
||
| Zeile 8: | Zeile 8: | ||
== Views == | == Views == | ||
| + | === Vertical Seek Bar === | ||
| + | http://stackoverflow.com/questions/4892179/how-can-i-get-a-working-vertical-seekbar-in-android (2013-02) | ||
| + | |||
| + | Siehe auch die Kommentare wg. Verbesserungen und Problembehebungen | ||
| + | |||
| + | <pre> | ||
| + | package android.widget; | ||
| + | |||
| + | import android.content.Context; | ||
| + | import android.graphics.Canvas; | ||
| + | import android.util.AttributeSet; | ||
| + | import android.view.MotionEvent; | ||
| + | |||
| + | public class VerticalSeekBar extends SeekBar { | ||
| + | |||
| + | public VerticalSeekBar(Context context) { | ||
| + | super(context); | ||
| + | } | ||
| + | |||
| + | public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) { | ||
| + | super(context, attrs, defStyle); | ||
| + | } | ||
| + | |||
| + | public VerticalSeekBar(Context context, AttributeSet attrs) { | ||
| + | super(context, attrs); | ||
| + | } | ||
| + | |||
| + | protected void onSizeChanged(int w, int h, int oldw, int oldh) { | ||
| + | super.onSizeChanged(h, w, oldh, oldw); | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { | ||
| + | super.onMeasure(heightMeasureSpec, widthMeasureSpec); | ||
| + | setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth()); | ||
| + | } | ||
| + | |||
| + | protected void onDraw(Canvas c) { | ||
| + | c.rotate(-90); | ||
| + | c.translate(-getHeight(), 0); | ||
| + | |||
| + | super.onDraw(c); | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public boolean onTouchEvent(MotionEvent event) { | ||
| + | if (!isEnabled()) { | ||
| + | return false; | ||
| + | } | ||
| + | |||
| + | switch (event.getAction()) { | ||
| + | case MotionEvent.ACTION_DOWN: | ||
| + | case MotionEvent.ACTION_MOVE: | ||
| + | case MotionEvent.ACTION_UP: | ||
| + | setProgress(getMax() - (int) (getMax() * event.getY() / getHeight())); | ||
| + | onSizeChanged(getWidth(), getHeight(), 0, 0); | ||
| + | break; | ||
| + | |||
| + | case MotionEvent.ACTION_CANCEL: | ||
| + | break; | ||
| + | } | ||
| + | return true; | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | Implementation | ||
| + | To implement it, create a new class in your project, choosing the right package: android.widget | ||
| + | |||
| + | xml Layout | ||
| + | <pre> | ||
| + | |||
| + | <android.widget.VerticalSeekBar | ||
| + | android:id="@+id/seekBar1" | ||
| + | android:layout_width="wrap_content" | ||
| + | android:layout_height="200dp" | ||
| + | /> | ||
| + | </pre> | ||
== Events == | == Events == | ||
Version vom 4. März 2013, 08:50 Uhr
Activities
Android - Neue Activity anlegen und starten
Layouts
Lock Portrait or Landscape fullscreen - requestwindowfeature
Views
Vertical Seek Bar
http://stackoverflow.com/questions/4892179/how-can-i-get-a-working-vertical-seekbar-in-android (2013-02)
Siehe auch die Kommentare wg. Verbesserungen und Problembehebungen
package android.widget;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.MotionEvent;
public class VerticalSeekBar extends SeekBar {
public VerticalSeekBar(Context context) {
super(context);
}
public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public VerticalSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(h, w, oldh, oldw);
}
@Override
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(heightMeasureSpec, widthMeasureSpec);
setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
}
protected void onDraw(Canvas c) {
c.rotate(-90);
c.translate(-getHeight(), 0);
super.onDraw(c);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (!isEnabled()) {
return false;
}
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
setProgress(getMax() - (int) (getMax() * event.getY() / getHeight()));
onSizeChanged(getWidth(), getHeight(), 0, 0);
break;
case MotionEvent.ACTION_CANCEL:
break;
}
return true;
}
}
Implementation To implement it, create a new class in your project, choosing the right package: android.widget
xml Layout
<android.widget.VerticalSeekBar android:id="@+id/seekBar1" android:layout_width="wrap_content" android:layout_height="200dp" />
Events
Graphic and Animation
Bitmap - ressource und input stream
Sprites