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 android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---