Normally, you create a stored procedure owned by the table owner that does the actual truncate and then grant whatever users need to do the actual truncation EXECUTE access on this stored procedure.
Is there any good ways besides drop any table privilege?
Yes, I know it's not good and dangerous to grant that privilege. But that seems the only way Oracle give to truncate other user's tables.
To truncate a table or cluster, the table or cluster must be in your schema or you must have DROP ANY TABLE system privilege.