android एनिमेशन के साथ एंड्रॉइड ड्राइंग आयत टाइमर



animation view (2)

मैं एक एनीमेशन ड्राइंग स्ट्रोक आयत की कोशिश कर रहा हूँ:

इस समस्या के लिए कोई किकस्टार्ट उपयोगी होगा। दृश्य का उपयोग करना, कैनवस कुछ भी

धन्यवाद


Answer #1

ठीक है, आप शुरू करने के लिए कुछ है, यह पूरा समाधान नहीं है, लेकिन यहां से आप अपना कार्य पूरा कर सकते हैं।

मैं क्या कर रहा हूँ गतिशील प्रगति के अनुसार मेरे मुखौटा को अद्यतन कर रहा है। मैंने एक रेखा खीचली है, लेकिन आपके मामले में आपको चार पंक्तियां आकर्षित करने की आवश्यकता है जो प्रगति के अनुसार एक नकाबपोश आयताकार बना देगा। यह कोड मुझे बताता है कि यदि यह मदद करता है:

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);
}

}

Answer #2

मुझे लगता है कि आप AnimationDrawable ड्रेनेबल के साथ कुछ बुनियादी हासिल कर सकते हैं और एक फ्रेम-बाय-फ़्रेम एनिमेशन बना सकते हैं। जाहिर है, जितना फ्रेम आप चिकनी का उपयोग करते हैं वो हो जाता है

<!-- 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>

अन्य विकल्प ClipDrawable आयतों का उपयोग अपने आयत को मुखौटा करने के लिए और मुखौटा को चेतन करने के लिए किया जाएगा। Customize Your Progress Bar को Customize Your Progress Bar करने के लिए ट्यूटोरियल है जो आपके उद्देश्य के लिए समान तर्क का उपयोग करता है। मुझे ऐसी ही उम्मीद है।

this sample देखो यह फ़्लैश है, लेकिन यह एक स्ट्रोकिंग प्रभाव को प्राप्त करने के लिए समान क्लिपिंग तकनीक का उपयोग करता है।

यदि मैं गलत नहीं हूं, तो एंड्रॉइड Canvas पास आपके ग्राफिक्स को clipPath लिए कुछ clip पद्धतियां हैं: clipPath , clipRegion और clipRegion । लेकिन मुझे यकीन नहीं है कि यह एनिमेटेड हो सकता है या नहीं। उनकी जाँच करो।





draw