Implémentation d'un dessin personnalisable dans Android
J'essayais d'obtenir des graphismes en 2D Android.
Comme un exemple, je veux mettre en œuvre une coutume drawable et l'afficher dans mon Activité
J'ai défini une mesure dessiné par s'étendant à partir de Android drawable comme mentionné ci-dessous
class myDrawable extends Drawable {
private static final String TAG = myDrawable.class.getSimpleName();
private ColorFilter cf;
@Override
public void draw(Canvas canvas) {
//First you define a colour for the outline of your rectangle
Paint rectanglePaint = new Paint();
rectanglePaint.setARGB(255, 255, 0, 0);
rectanglePaint.setStrokeWidth(2);
rectanglePaint.setStyle(Style.FILL);
//Then create yourself a Rectangle
RectF rectangle = new RectF(15.0f, 50.0f, 55.0f, 75.0f); //in pixels
Log.d(TAG,"On Draw method");
//TODO Auto-generated method stub
Paint paintHandl = new Paint();
// paintHandl.setColor(0xaabbcc);
paintHandl.setARGB(125, 234, 213, 34 );
RectF rectObj = new RectF(5,5,25,25);
canvas.drawRoundRect(rectangle, 0.5f, 0.5f, rectanglePaint);
}
@Override
public int getOpacity() {
//TODO Auto-generated method stub
return 100;
}
@Override
public void setAlpha(int alpha) {
//TODO Auto-generated method stub
}
@Override
public void setColorFilter(ColorFilter cf) {
//TODO Auto-generated method stub
this.cf = cf;
}
}
Je suis en train d'essayer d'obtenir cette affiche dans mon activité, comme indiqué ci-dessous
public class custDrawable extends Activity {
/** Called when the activity is first created. */
LinearLayout layObj = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
layObj = (LinearLayout) findViewById(R.id.parentLay);
ImageView imageView = (ImageView) findViewById(R.id.icon2);
myDrawable myDrawObj = new myDrawable();
imageView.setImageDrawable(myDrawObj);
imageView.invalidate();
// layObj.addView(myDrawObj, params);
}
}
Mais quand je lance l'application je ne vois pas de rectangle sur l'activité, quelqu'un peut-il m'aider?
Où vais-je tort?
source d'informationauteur Girish
Vous devez vous connecter pour publier un commentaire.
Votre problème est dans le
getOpacity()
méthode. 100 n'est pas une valeur valide. Vous devez utiliser un PixelFormat valeur. Aussi, vous devez créer votreRectF
etPaint
dans le constructeur et ensuite il suffit d'ajuster les valeurs dansdraw()
afin de ne pas créer autant d'objets qui ont besoin de ces ordures. Comme ceci:Vous pouvez avoir à mettre en œuvre d'autres remplacements comme getIntrinsicWidth() et getIntrinsicHeight(). Une façon de dire, c'est que vous définissez votre layout_width et layout_height à une constante (layout_width="42dip" layout_height="42dip" dans le XML ou le réglage de votre layoutParams à une certaine valeur si vous utilisez Java mises en page). Certains types de poignée de ne pas avoir getIntrinsic* de mettre en œuvre que d'autres, alors essayez-les! Cela inclut une Vue directe sur le
Vous pouvez essayer de retourner -1 si il n'y a pas de largeur ou de la hauteur.
Difficile de dire si le problème jamais résolu, mais je suis arrivé ici via Google essayer de les aider, de me rappeler les détails de faire un custom Drawable, plus je veux aider les gens à éviter cela: http://xkcd.com/979/