Here is a skeleton of the class I'm currently working on.
Unfortunatly, i'm stuck on two problems and it's driving me mad !
The first problem is about the onKeyDown(KeyEvent) : I don't
understand why this method isn't called while I pressed a key on the
emulator.
The second problem deals with padding. Indeed, I'm always creating
widget using fake paddings in order to be sure my widget correctly
handle those values. Unfortunatly, I tried to extend a ProgressBar and
I had some problems because my ProgressBar is clipped.
My code is :
package com.niji.android.myhouse;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.widget.ProgressBar;
public class ProgressWheel extends ProgressBar {
private static final String TAG_LOG = "ProgressWheel";
private static final Paint mPaint = new Paint();
private float oldX;
public ProgressWheel(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ProgressWheel(Context context, AttributeSet attrs, int
defStyle) {
super(context, attrs, defStyle);
mPaint.setStrokeWidth(1.0f);
mPaint.setColor(Color.MAGENTA);
mPaint.setStyle(Paint.Style.STROKE);
setPadding(5, 15, 40, 10)
}
@Override
protected synchronized void onDraw(Canvas canvas) {
/*
* I'm not sure the onDraw(Canvas) method from ProgressBar is
correctly
* implemented. Indeed. With padding values, The progressBar
may be
"clipped"
*/
super.onDraw(canvas);
canvas.drawRect(0, 0, getWidth()-1, getHeight()-1, mPaint);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
/*
* I don't understand why this method is not called
*/
int progress = getProgress();
Log.d(TAG_LOG, "onKeyDown");
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_LEFT:
Log.d(TAG_LOG, "KEYCODE_DPAD_LEFT");
if (progress <= 0) break;
setProgress(progress - 1);
return true;
case KeyEvent.KEYCODE_DPAD_RIGHT:
Log.d(TAG_LOG, "KEYCODE_DPAD_RIGHT");
if (progress >= getMax()) break;
setProgress(progress + 1);
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d(TAG_LOG, "onTouchEvent");
int progress = getProgress();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
oldX = event.getX();
break;
case MotionEvent.ACTION_MOVE:
if (event.getX() > oldX) {
setProgress(progress + 1);
}
else setProgress(progress - 1);
oldX = event.getX();
break;
default:
break;
}
return true;
}
}
and here is my XML layout :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/RelativeLayout01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android" >
<com.mypackage.ProgressWheel
style="?android:attr/progressBarStyleHorizontal"
android:layout_centerInParent="true"
android:layout_margin="10px"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:progress="35" />
</RelativeLayout>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---