studio programacion móviles example dibujar desarrollo curso aplicaciones animaciones android animation view android-canvas draw

programacion - dibujar en android studio



Android dibujo temporizador de rectángulo con animación (2)

Creo que puedes lograr algo muy básico con AnimationDrawable y crear una animación cuadro por cuadro. Obviamente, cuanto más marco utilizas, más suave se vuelve.

<!-- Animation frames are wheel0.png -- wheel5.png files inside the res/drawable/ folder --> <animation-list android:id="@+id/selected" android:oneshot="false"> <item android:drawable="@drawable/wheel0" android:duration="50" /> <item android:drawable="@drawable/wheel1" android:duration="50" /> ... </animation-list>

Otra opción sería usar ClipDrawable para enmascarar su rectángulo y animar la máscara. Hay un tutorial para Customize Your Progress Bar que utiliza la misma lógica para su propósito. Eso espero.

Mire this sample . Es flash pero usa la misma técnica de recorte para lograr un efecto de caricias.

Si no me equivoco, Android Canvas tiene algunos métodos de clip para enmascarar sus gráficos: clipPath , clipRect y clipRegion . Pero no estoy seguro si puede ser animado o no. Échales un vistazo.

Estoy tratando de tener un rectángulo de trazo de dibujo de animación:

Cualquier kickstart para este problema será útil. Usando Views, Canvas todo.

Gracias


Ok, aquí hay algo para que comiences, no es la solución completa, pero desde aquí puedes completar tu tarea.

Lo que estoy haciendo es actualizar dinámicamente mi máscara de acuerdo con el progreso. Acabo de dibujar una línea, pero en su caso necesita dibujar cuatro líneas que formarán un rectángulo enmascarado de acuerdo con el progreso. Aquí está el código, avíseme si eso ayuda:

public class DrawView extends View implements Runnable { Bitmap mProgressBitmap; Bitmap mMaskProgressBitmap; Bitmap mResultBitmap; Canvas mTempCanvas; Canvas mMaskCanvas; Paint mPaint; Paint mWhitePaint; Handler mHandler = new Handler(); float mProgress = 0; static final long FRAME_TIME = 50; public DrawView(Context context, AttributeSet attrs) { super(context, attrs); InputStream resource = getResources().openRawResource(R.drawable.timer); mProgressBitmap = BitmapFactory.decodeStream(resource); mMaskProgressBitmap = Bitmap.createBitmap(mProgressBitmap.getWidth(), mProgressBitmap.getHeight(), Bitmap.Config.ARGB_8888); mMaskCanvas = new Canvas(mMaskProgressBitmap); mMaskCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); mResultBitmap = Bitmap.createBitmap(mProgressBitmap.getWidth(), mProgressBitmap.getHeight(), Bitmap.Config.ARGB_8888); mTempCanvas = new Canvas(mResultBitmap); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); mPaint.setDither(true); mWhitePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mWhitePaint.setColor(Color.WHITE); mWhitePaint.setStrokeWidth(50); mHandler.postDelayed(this, FRAME_TIME); } @Override public void onDraw(Canvas canvas) { mTempCanvas.drawBitmap(mMaskProgressBitmap, 0, 0, null); mTempCanvas.drawBitmap(mProgressBitmap, 0, 0, mPaint); canvas.drawBitmap(mResultBitmap, 0, 0, null); } @Override public void run() { mProgress += 0.01f; mMaskCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); mMaskCanvas.drawLine(0, 0, (float)mProgressBitmap.getWidth() * mProgress, 0, mWhitePaint); this.invalidate(); mHandler.postDelayed(this, FRAME_TIME); } }