mytechead

Android & Wordpress Help center

Archive for the month “July, 2012”

Set resource of ‘setprogressDrawable’ programmatically

If your a re trying to create a custom progressbar for your android application, setProgressDrawable method might come handy in doing so.

The method setProgressDrawable expects a parameter of type Drawable which is basically your custom image/color/gradient that you want to set.

But there is a slight catch when  setProgressDrawable method is used, when you set the resource it will set correctly but when you’ll run your program you wont be able to

see it on the actual page. This is because the bounds are not set for the progress bar and you need to do this using the following code –

// get progress bar bounds.
Rect bounds = seekBar.getProgressDrawable().getBounds();

seekBar.setProgressDrawable(getResources().getDrawable(R.drawable.your_drawable));

seekBar.getProgressDrawable().setBounds(bounds);

This will correctly set the drawable image.

Advertisements

set Text color programmatically

Well, although it was never thought by me that to I will be writing a blog page for telling users how to set color of a TextView programmatically- but setting android’s TextView programmatically requires few more efforts than one can possibly think of, which is why I decided to create this post –

In order to set color of a TextView, TextView.setTextColor(R.color.YOURCOLOR) is not enough!

It has to be used like this –

TextView myText = (TextView) findViewById(R.id.mytext);

myText.setTextColor(getResources().getColor(R.color.YOURCOLOR);

Android Swipe gestures

I was looking forward to learn how Swipe gestures can be implemented in android and came across this very nicely written blog which has all the code needed to implement the swipe gestures – http://misha.beshkin.lv/android-swipe-gesture-implementation/

So here it goes –

We need to create a class first which extends the android base class SimpleOnGestureListener -

Code : 

public class SimpleGestureFilter extends SimpleOnGestureListener{

public final static int SWIPE_UP = 1;
public final static int SWIPE_DOWN = 2;
public final static int SWIPE_LEFT = 3;
public final static int SWIPE_RIGHT = 4;

public final static int MODE_TRANSPARENT = 0;
public final static int MODE_SOLID = 1;
public final static int MODE_DYNAMIC = 2;

private final static int ACTION_FAKE = -13; //just an unlikely number
private int swipe_Min_Distance = 100; // Set this as per the requirement
private int swipe_Max_Distance = 350; // Set this as per the requirement
private int swipe_Min_Velocity = 100; // Set this as per the requirement

private int mode = MODE_DYNAMIC;
private boolean running = true;
private boolean tapIndicator = false;

private Activity context;
private GestureDetector detector;
private SimpleGestureListener listener;

public SimpleGestureFilter(Activity context,SimpleGestureListener sgl) {

this.context = context;
this.detector = new GestureDetector(context, this);
this.listener = sgl;
}

public void onTouchEvent(MotionEvent event){

if(!this.running)
return;

boolean result = this.detector.onTouchEvent(event);

if(this.mode == MODE_SOLID)
event.setAction(MotionEvent.ACTION_CANCEL);
else if (this.mode == MODE_DYNAMIC) {

if(event.getAction() == ACTION_FAKE)
event.setAction(MotionEvent.ACTION_UP);
else if (result)
event.setAction(MotionEvent.ACTION_CANCEL);
else if(this.tapIndicator){
event.setAction(MotionEvent.ACTION_DOWN);
this.tapIndicator = false;
}

}
//else just do nothing, it’s Transparent
}

public void setMode(int m){
this.mode = m;
}

public int getMode(){
return this.mode;
}

public void setEnabled(boolean status){
this.running = status;
}

public void setSwipeMaxDistance(int distance){
this.swipe_Max_Distance = distance;
}

public void setSwipeMinDistance(int distance){
this.swipe_Min_Distance = distance;
}

public void setSwipeMinVelocity(int distance){
this.swipe_Min_Velocity = distance;
}

public int getSwipeMaxDistance(){
return this.swipe_Max_Distance;
}

public int getSwipeMinDistance(){
return this.swipe_Min_Distance;
}

public int getSwipeMinVelocity(){
return this.swipe_Min_Velocity;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {

final float xDistance = Math.abs(e1.getX() – e2.getX());
final float yDistance = Math.abs(e1.getY() – e2.getY());

if(xDistance > this.swipe_Max_Distance || yDistance > this.swipe_Max_Distance)
return false;

velocityX = Math.abs(velocityX);
velocityY = Math.abs(velocityY);
boolean result = false;

if(velocityX > this.swipe_Min_Velocity && xDistance > this.swipe_Min_Distance){
if(e1.getX() > e2.getX()) // right to left
this.listener.onSwipe(SWIPE_LEFT);
else
this.listener.onSwipe(SWIPE_RIGHT);

result = true;
}
else if(velocityY > this.swipe_Min_Velocity && yDistance > this.swipe_Min_Distance){
if(e1.getY() > e2.getY()) // bottom to up
this.listener.onSwipe(SWIPE_UP);
else
this.listener.onSwipe(SWIPE_DOWN);

result = true;
}

return result;
}

@Override
public boolean onSingleTapUp(MotionEvent e) {
this.tapIndicator = true;
return false;
}

@Override
public boolean onDoubleTap(MotionEvent arg0) {
this.listener.onDoubleTap();;
return true;
}

@Override
public boolean onDoubleTapEvent(MotionEvent arg0) {
return true;
}

@Override
public boolean onSingleTapConfirmed(MotionEvent arg0) {

if(this.mode == MODE_DYNAMIC){ // we owe an ACTION_UP, so we fake an
arg0.setAction(ACTION_FAKE); //action which will be converted to an ACTION_UP later.
this.context.dispatchTouchEvent(arg0);
}

return false;
}

public static interface SimpleGestureListener{
void onSwipe(int direction);
void onDoubleTap();
}

}

Now once this is done, next we need to use this inside our activity and implement the static class SimpleGestureListener

Code : 

public class myClass extends ListActivity implements SimpleGestureListener{
private SimpleGestureFilter detector;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myprog);

detector = new SimpleGestureFilter(this,this);
}

@Override
public boolean dispatchTouchEvent(MotionEvent me){
this.detector.onTouchEvent(me);
return super.dispatchTouchEvent(me);
}
@Override
public void onSwipe(int direction) {
String str = “”;

switch (direction) {

case SimpleGestureFilter.SWIPE_RIGHT : str = “Swipe Right”;
break;
case SimpleGestureFilter.SWIPE_LEFT : str = “Swipe Left”;
break;
case SimpleGestureFilter.SWIPE_DOWN : str = “Swipe Down”;
break;
case SimpleGestureFilter.SWIPE_UP : str = “Swipe Up”;
break;

}
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}

@Override
public void onDoubleTap() {
Toast.makeText(this, “Double Tap”, Toast.LENGTH_SHORT).show();
}

}

That’s it!

Disable elements of ListView

In order to disable few elements of a list view, you need to implement your own ArrayAdapter by extending the ArrayAdapter class.

In this Custom ArrayAdapter class one can override areAllItemsEnabled() method to return false.Also, override the method isEnabled()  and return false for the items that you don’t wish to enable; for others return true.

Code :

@Override

public boolean areAllItemsEnabled() {

    return false; } 

@Override
public boolean isEnabled(int position){

if(!areAllItemsEnabled()){
  if(<your condition here>){
   return false; // disable the item
 }
}
 return true;  // enable the item
}


						
					

Post Navigation